Hiển thị max_execution_time MySQL
Bạn có thể tự hỏi liệu người dùng của bạn có thể làm chậm hoặc thậm chí DOS cơ sở dữ liệu MySQL của bạn với một yêu cầu không may mắn hay không. Nếu nó chỉ chứa sai số lượng điều kiện trong biểu mẫu tìm kiếm nâng cao của bạn, kích hoạt quá trình quét toàn bộ bảng trên tập dữ liệu lớn hơn nhiều so với bạn dự đoán thì có thể họ có thể Show
Nếu bạn cung cấp chức năng tìm kiếm nâng cao, thống kê tổng hợp, báo cáo hoặc xuất dữ liệu trong ứng dụng của mình, thì truy vấn chạy dài không thường xuyên là một phần của thiết kế. Bạn có thể chưa bị quá tải và chậm cơ sở dữ liệu, chỉ vì người dùng của bạn không thường xuyên sử dụng các tính năng này Cho đến MySQL 5. 7, bạn không có cách nào dễ dàng để tự bảo vệ mình khỏi một lượng lớn người dùng DDoS cơ sở dữ liệu của bạn bằng các truy vấn chạy dài. Ngoài ra, PHP Khi bạn Google vấn đề này, giải pháp được đề xuất là chạy một daemon hoặc cronjob theo dõi danh sách quy trình và chỉ loại bỏ các truy vấn chạy dài. Điều này chắc chắn hoạt động, nhưng bạn không biết ai đang chạy truy vấn và tại sao, điều này ngăn bạn áp dụng thời gian chờ chi tiết hơn dựa trên ngữ cảnh (ví dụ: web so với quy trình nền) Với MySQL5. 7, giờ đây bạn có thể sử dụng gợi ý truy vấn trình tối ưu hóa mới cho các truy vấn
Hoặc bạn có thể thiết lập một
Thời gian chờ chỉ áp dụng cho các truy vấn CHỌN chỉ đọc Nếu truy vấn của bạn mất nhiều thời gian, nó sẽ không thành công với lỗi sau
Bạn có thể xử lý lỗi này một cách tập trung trong ứng dụng của mình và hiển thị thông báo cho người dùng rằng phản hồi mất quá nhiều thời gian và đã bị hủy bỏ Sử dụng phần mềm Theo dõi ngoại lệ (chẳng hạn như Tideways), bạn có thể ghi nhật ký người dùng, giao dịch hoặc trang nào đang khiến các truy vấn này bị hủy bỏ, tần suất chúng xảy ra và liệu hiệu suất truy vấn có thể được cải thiện hay không Trong bài đăng này, chúng ta sẽ tìm hiểu về những tùy chọn khả dụng nếu bạn cần tự động loại bỏ các truy vấn chạy dài mysql 5. 7 trở lên Đối với câu lệnh SELECTBắt đầu từ MySQL 5. 7. 4 có hỗ trợ cho thời gian chờ tự động của các câu lệnh CHỌN chỉ đọc (thảo luận sau đây giả định 5. 7. 8 trở lên vì tính năng này đã thay đổi tên và cú pháp tùy chọn/gợi ý) Có hai cách để đặt giới hạn trên về thời gian cho phép thực thi câu lệnh CHỌN chỉ đọc
Những điều sau đây áp dụng
Hai tùy chọn này sẽ được thảo luận trong phần sau Tùy chọn max_statement_timeTùy chọn max_execution_time chỉ định thời gian chờ cho các câu lệnh CHỌN chỉ đọc nếu gợi ý trình tối ưu hóa MAX_EXECUTION_TIME() không được thêm vào. Giá trị tính bằng mili giây Tùy chọn tồn tại ở cả cấp độ TOÀN CẦU và PHIÊN và có thể thay đổi linh hoạt. Giá trị TOÀN CẦU được sử dụng làm giá trị mặc định cho giá trị SESSION. Giá trị bằng 0 có nghĩa là không có thời gian chờ nào có hiệu lực mysql> connect Connection id: 5 Current database: *** NONE *** mysql> SELECT @@global.max_statement_time, @@session.max_statement_time; +-----------------------------+------------------------------+ | @@global.max_statement_time | @@session.max_statement_time | +-----------------------------+------------------------------+ | 1000 | 1000 | +-----------------------------+------------------------------+ 1 row in set (0.00 sec) mysql> SET SESSION max_statement_time = 2000; -- 2 seconds Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@global.max_statement_time, @@session.max_statement_time; +-----------------------------+------------------------------+ | @@global.max_statement_time | @@session.max_statement_time | +-----------------------------+------------------------------+ | 1000 | 2000 | +-----------------------------+------------------------------+ 1 row in set (0.00 sec) Một truy vấn lấy 1. 5 giây thành công mysql> SELECT SLEEP(1.5); +------------+ | SLEEP(1.5) | +------------+ | 0 | +------------+ 1 row in set (1.51 sec) Truy vấn mất hơn 2 giây không thành công mysql> SELECT SLEEP(5); +----------+ | SLEEP(5) | +----------+ | 1 | +----------+ 1 row in set (2.02 sec) Chỉ các câu lệnh SELECT bị ảnh hưởng mysql> DO SLEEP(5); Query OK, 0 rows affected (5.00 sec) Mệnh đề MAX_STATEMENT_TIME cho câu lệnh SELECTCó thể sử dụng gợi ý tối ưu hóa MAX_EXECUTION_TIME() để thay đổi thời gian chờ cho một truy vấn cụ thể. Ví dụ: nếu max_execution_time được đặt thành 1 giây, nhưng bạn biết một truy vấn nhất định mất 5 giây, thì bạn có thể thay đổi thời gian chờ ________số 8_______ mysql> SELECT /*+ MAX_EXECUTION_TIME(6000) */ /* may take up to 5+ seconds - don't kill */ SLEEP(5); +----------+ | SLEEP(5) | +----------+ | 0 | +----------+ 1 row in set (5.00 sec) hoặc bạn có thể sử dụng nó để giảm thời gian chờ mysql> SELECT /*+ MAX_EXECUTION_TIME(500) */ /* may take up to 5+ seconds - don't kill */ SLEEP(5); +----------+ | SLEEP(5) | +----------+ | 1 | +----------+ 1 row in set (0.50 sec Tất cả các phiên bản và tất cả các loại tuyên bốQuan trọng. Nếu bạn đang thay đổi dữ liệu trong các bảng không phải giao dịch, chẳng hạn như bảng MyISAM, thì việc tắt truy vấn sẽ không khôi phục giao dịch. Điều này có nghĩa là dữ liệu của bạn sẽ ở trạng thái không xác định khi tác động của câu lệnh được áp dụng một phần. Nếu bạn sử dụng bản sao, bạn sẽ cần xây dựng lại các bản sao. Nói chung, đối với các công cụ phi giao dịch, tốt hơn là để câu lệnh chạy Trước MySQL 5. 7. 4, không có cách tích hợp nào để tự động loại bỏ các truy vấn chạy dài. Thay vào đó, một trong hai giải pháp sau đây có thể được sử dụng
Cả hai hoạt động theo những cách rất giống nhau. Đầu tiên có lợi thế là bạn có thể chọn ngôn ngữ lập trình mà bạn chọn trong khi giải pháp thủ tục/sự kiện được lưu trữ giữ mọi thứ bên trong cơ sở dữ liệu Ghi chú. Các giao dịch InnoDB đã sửa đổi một số lượng lớn hàng sẽ mất một lúc để khôi phục. Theo nguyên tắc thông thường, bạn nên mong đợi quá trình khôi phục sẽ mất gấp 10 lần miễn là thực hiện các sửa đổi. Vì vậy, bạn muốn xem xét số lượng mục hoàn tác cho một giao dịch trước khi giết nó Để thực hiện kiểm tra, bạn sẽ cần sử dụng danh sách quy trình. Trong MySQL5. 1 trở lên, bạn có thể sử dụng information_schema. Bảng PROCESSLIST cho phép lấy danh sách quy trình từ truy vấn CHỌN tiêu chuẩn cần thiết nếu giải pháp được triển khai bên trong một thủ tục được lưu trữ. Trong MySQL5. 6 trở lên, performance_schema. bảng chủ đề có thể được sử dụng (và nói chung được ưa thích hơn vì nó yêu cầu ít khóa hơn SHOW PROCESSLIST hoặc information_schema. DANH SÁCH QUY TRÌNH) Đối với InnoDB, bạn cũng có thể quan tâm đến các giao dịch dài hạn. Chúng có thể được theo dõi thông qua INNODB_TRX trong Lược đồ thông tin. Bảng INNODB_TRX bao gồm thời điểm bắt đầu giao dịch Bạn cũng có thể muốn xem xét liệu có bất kỳ truy vấn nào khác đang chờ khóa do truy vấn chạy dài hay không. Đối với các bảng InnoDB, có thể dễ dàng kiểm tra điều này bằng cách sử dụng các bảng INNODB_LOCK_WAITS và INNODB_TRX trong Lược đồ thông tin. Các bảng lược đồ thông tin InnoDB có sẵn bắt đầu từ MySQL 5. 1 với Plugin InnoDB và MySQL 5. 5 trở lên Mặc dù các truy vấn và giao dịch chạy dài nói chung là không tốt vì chúng có thể chặn các kết nối khác và tăng mức sử dụng tài nguyên, một số truy vấn chắc chắn sẽ mất nhiều thời gian, ví dụ: tạo lại bảng của các bảng lớn, nhập hàng loạt, v.v. Vì vậy, bạn có thể muốn xem xét một cách để gắn cờ các truy vấn mà bạn không muốn chấm dứt; Ghi chú. Hãy chắc chắn rằng bạn kiểm tra giải pháp của bạn. Các tài liệu tham khảo ở trên chỉ là ví dụ và có nghĩa là đề xuất cách bắt đầu và không nên được coi là giải pháp sẵn sàng sản xuất Làm cách nào để kiểm tra Max_execution_time trong MySQL?HIỂN THỊ CÁC BIẾN NHƯ 'MAX_EXECUTION_TIME' hoặc chọn @@max_execution_time để truy xuất . "Thời gian chờ thực hiện cho các câu lệnh SELECT, tính bằng mili giây. Nếu giá trị là 0, thời gian chờ KHÔNG được bật. " theo tài liệu.
Giá trị của Max_execution_time trong MySQL là gì?SET TOÀN CẦU MAX_EXECUTION_TIME=1000; . Mặc định cho biến TOÀN CẦU là 0, nghĩa là không có giới hạn thời gian toàn cầu .
Làm cách nào để kiểm tra các biến môi trường trong MySQL?HIỂN THỊ BIẾN chấp nhận công cụ sửa đổi phạm vi biến GLOBAL hoặc SESSION tùy chọn. Với công cụ sửa đổi TOÀN CẦU, câu lệnh hiển thị các giá trị biến hệ thống toàn cầu. Đây là các giá trị được sử dụng để khởi tạo các biến phiên tương ứng cho các kết nối mới tới MySQL. Nếu một biến không có giá trị toàn cầu, không có giá trị nào được hiển thị.
Làm cách nào để tăng thời gian chờ truy vấn trong MySQL?Tôi có thể điều chỉnh thời gian chờ không? . Điều này đặt lượng thời gian tối đa (tính bằng giây) mà một truy vấn có thể thực hiện trước khi MySQL Workbench ngắt kết nối khỏi máy chủ MySQL. go to Preferences, SQL Editor, and adjust the DBMS connection read time out option that defaults to 600 seconds. This sets the maximum amount of time (in seconds) that a query can take before MySQL Workbench disconnects from the MySQL server. |