Câu trả lời
Không, hàm SLEEP() của MySQL không phải busy-wait. Nó nhường CPU (sleep thực sự) thay vì vòng lặp kiểm tra liên tục.
Minh họa
Tạo bảng và chèn dữ liệu:
CREATE TABLE DemoTable (FirstName VARCHAR(100));
INSERT INTO DemoTable VALUES ('John'), ('Adam'), ('Bob'), ('Chris'), ('Robert');
Thực hiện truy vấn với SLEEP(10):
SELECT SLEEP(10), FirstName FROM DemoTable;
Kết quả (trả về sau 50 giây = 5 dòng × 10 giây):
+-----------+-----------+
| sleep(10) | FirstName |
+-----------+-----------+
| 0 | John |
| 0 | Adam |
| 0 | Bob |
| 0 | Chris |
| 0 | Robert |
+-----------+-----------+
5 rows in set (50.00 sec)
Đặc điểm quan trọng
SLEEP()thực thi theo từng dòng (row-by-row).- Tổng thời gian = số dòng × số giây sleep.
- Trả về 0 khi hoàn thành, trả về 1 nếu bị ngắt (KILL QUERY).
- Không tiêu tốn CPU trong lúc chờ (khác với busy-wait loop).
Ứng dụng thực tế
- Test timeout, deadlock, replication lag.
- Mô phỏng latency trong stored procedure.
- Debug concurrency issues.
Cảnh báo
Không dùng SLEEP() trong production queries - nó khóa kết nối, tăng latency, và có thể gây connection pool exhaustion.