Tôi vừa mới bật slow query logging trên cơ sở dữ liệu MySQL của tôi, thêm dòng sau vào /etc/mysql/my.cnf
:"SELECT/*! N SQL_NO_CACHE */* FROM` mytable` có nghĩa là gì trong nhật ký truy vấn chậm của MySQL?
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
Khi tôi chạy mysqldumpslow, nó ra như sau:
Reading mysql slow query log from mysql-slow.log
Count: 1 Time=199.23s (199s) Lock=0.00s (0s) Rows=32513.0 (32513), ...
SELECT /*!N SQL_NO_CACHE */ * FROM `mytable`
...
Nhìn vào bản gốc mysql-slow.log
, truy vấn đầy đủ là:
SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable`;
Vì vậy, mysqldumpslow
vừa thay thế số với N
(để hỗ trợ tổng hợp các truy vấn tương tự.)
Vì vậy, câu hỏi là, truy vấn đó đến từ đâu và ý nghĩa của bit /*!40001 SQL_NO_CACHE */
là gì?
Tốt nhất tôi có thể nói, có thể là từ lệnh mysqldump
đang thực hiện sao lưu (do đó không muốn dữ liệu được lưu trong bộ nhớ cache), điều đó có đúng không? Và nếu có, vì nó chỉ đọc 32.000 hàng, tại sao nó mất 199s?
Có một loạt các truy vấn tương tự trên các bảng khác lấy 100s, 50s, xuống 3s hợp lý hơn, hầu hết có khoảng 10-20.000 hàng, lớn nhất với 450.000 hàng.
có thể bạn có thể chấp nhận câu trả lời tốt hơn bên dưới? – rubo77