PS_THREAD_ID() în MySQL

Transformă ID-ul unei conexiuni în ID-ul firului ei din Performance Schema.

Sintaxă
PS_THREAD_ID(id_conexiune)

Ce face PS_THREAD_ID()

PS_THREAD_ID() primește un ID de conexiune (cel din SHOW PROCESSLIST sau din CONNECTION_ID()) și returnează THREAD_ID-ul folosit în tabelele din performance_schema.

Returnează NULL dacă nu există o conexiune cu acel ID, dacă argumentul este NULL sau dacă firul nu este monitorizat. Spre deosebire de funcția veche sys.ps_thread_id(), PS_THREAD_ID(NULL) nu înseamnă conexiunea curentă.

Parametri

Parametru Descriere
id_conexiune ID-ul conexiunii, ca în SHOW PROCESSLIST.

Ce returnează

Un număr BIGINT UNSIGNED sau NULL.

Exemple

Exemplul 1: Conexiunea curentă, NULL și un ID inexistent

SELECT PS_THREAD_ID(CONNECTION_ID()) = PS_CURRENT_THREAD_ID() AS curenta,
       PS_THREAD_ID(NULL) AS cu_null,
       PS_THREAD_ID(999999999) AS inexistent;

Rezultat

+---------+---------+------------+
| curenta | cu_null | inexistent |
+---------+---------+------------+
|       1 |    NULL |       NULL |
+---------+---------+------------+

Exemplul 2: Ultimele interogări ale unei alte conexiuni

Un administrator vede în SHOW PROCESSLIST conexiunea 23 și vrea să afle ce a rulat.

SELECT SQL_TEXT
FROM performance_schema.events_statements_history
WHERE THREAD_ID = PS_THREAD_ID(23)
ORDER BY EVENT_ID;

Rezultat în MySQL

+-------------------------------------------+
| SQL_TEXT                                  |
+-------------------------------------------+
| SELECT * FROM produse WHERE stoc = 0      |
| UPDATE produse SET stoc = 10 WHERE id = 3 |
+-------------------------------------------+

Greșeli frecvente

  • Scrii PS_THREAD_ID(NULL) ca să obții firul curent, ca la sys.ps_thread_id(). Primești NULL; folosește PS_CURRENT_THREAD_ID().

Comenzi înrudite

  • PS_CURRENT_THREAD_ID(): Returnează ID-ul din Performance Schema al firului (thread) conexiunii curente.
  • CONNECTION_ID(): Returnează numărul unic al conexiunii curente (ID-ul din SHOW PROCESSLIST).