SLEEP() în MySQL

Oprește execuția interogării pentru un număr de secunde (poate avea zecimale), apoi returnează 0.

Sintaxă
SLEEP(secunde)

Ce face SLEEP()

SLEEP() așteaptă durata cerută și returnează 0. Dacă interogarea este întreruptă (cu KILL QUERY sau prin limita de timp MAX_EXECUTION_TIME) și SLEEP() este singura operație, returnează 1, fără eroare.

Este folosită în teste: pentru a simula o interogare lentă, pentru a verifica limitele de timp sau pentru a testa blocările între două conexiuni. Un argument negativ sau NULL dă eroare în modul SQL strict.

Parametri

Parametru Descriere
secunde Durata pauzei, în secunde (de exemplu 0.5).

Ce returnează

0 la terminare normală, 1 dacă a fost întreruptă.

Exemple

Exemplul 1: O pauză scurtă

SELECT SLEEP(0.5) AS rezultat;

Rezultat

+----------+
| rezultat |
+----------+
|        0 |
+----------+

Exemplul 2: Întreruptă de limita de timp

Indicația MAX_EXECUTION_TIME(100) oprește interogarea după 100 de milisecunde.

SELECT /*+ MAX_EXECUTION_TIME(100) */ SLEEP(2) AS intrerupta;

Rezultat

+------------+
| intrerupta |
+------------+
|          1 |
+------------+

Greșeli frecvente

  • Folosești SLEEP() în WHERE pe un tabel mare. Pauza se repetă pentru fiecare rând verificat, iar interogarea poate dura extrem de mult.
  • Lași SLEEP() în cod de producție ca să „aștepți” alte procese. Conexiunea rămâne ocupată; folosește blocări (GET_LOCK()) sau o coadă de sarcini.

Comenzi înrudite

  • BENCHMARK(): Execută o expresie de un număr de ori, ca să măsori cât de repede o calculează serverul.
  • GET_LOCK(): Ia o blocare cu nume, pe tot serverul; alte conexiuni așteaptă până se eliberează.