Hướng dẫn how do i force kill a query in mysql? - làm cách nào để buộc hủy truy vấn trong mysql?

13.7.8.4 & NBSP; Tuyên bố tiêu diệt

KILL [CONNECTION | QUERY] processlist_id

Mỗi kết nối với MySQLD chạy trong một luồng riêng. Bạn có thể giết một chủ đề bằng tuyên bố KILL processlist_id.mysqld runs in a separate thread. You can kill a thread with the KILL processlist_id statement.

Các định danh danh sách xử lý luồng có thể được xác định từ cột ID của bảng INFORMATION_SCHEMA PROCESSLIST, cột Id của đầu ra SHOW PROCESSLIST và cột PROCESSLIST_ID của bảng Lược đồ hiệu suất threads. Giá trị cho luồng hiện tại được trả về bởi hàm

KILL [CONNECTION | QUERY] processlist_id
0.

KILL [CONNECTION | QUERY] processlist_id
1 cho phép sửa đổi
KILL [CONNECTION | QUERY] processlist_id
2 hoặc
KILL [CONNECTION | QUERY] processlist_id
3 tùy chọn:

  • KILL [CONNECTION | QUERY] processlist_id
    4 giống như
    KILL [CONNECTION | QUERY] processlist_id
    1 không có công cụ sửa đổi: nó chấm dứt kết nối được liên kết với
    KILL [CONNECTION | QUERY] processlist_id
    6 đã cho, sau khi chấm dứt bất kỳ câu lệnh nào, kết nối đang thực thi.

  • KILL [CONNECTION | QUERY] processlist_id
    7 chấm dứt câu lệnh mà kết nối hiện đang thực thi, nhưng khiến bản thân kết nối vẫn còn nguyên.

Khả năng xem các chủ đề nào có sẵn để bị giết phụ thuộc vào đặc quyền

KILL [CONNECTION | QUERY] processlist_id
8:

  • Không có

    KILL [CONNECTION | QUERY] processlist_id
    8, bạn chỉ có thể thấy các chủ đề của riêng bạn.

  • Với

    KILL [CONNECTION | QUERY] processlist_id
    8, bạn có thể thấy tất cả các chủ đề.

Khả năng tiêu diệt các luồng và tuyên bố phụ thuộc vào đặc quyền KILL processlist_id1 và đặc quyền KILL processlist_id2 không dùng nữa:

  • Không có KILL processlist_id1 hoặc KILL processlist_id2, bạn chỉ có thể giết các chủ đề và câu lệnh của riêng mình.

  • Với KILL processlist_id1 hoặc KILL processlist_id2, bạn có thể giết tất cả các luồng và câu lệnh, ngoại trừ để ảnh hưởng đến một luồng hoặc tuyên bố đang thực thi với đặc quyền KILL processlist_id7, phiên riêng của bạn phải có đặc quyền KILL processlist_id7.

Bạn cũng có thể sử dụng Danh sách xử lý MySQLadmin và các lệnh giết MySQLadmin để kiểm tra và tiêu diệt các chủ đề.mysqladmin processlist and mysqladmin kill commands to examine and kill threads.

Khi bạn sử dụng

KILL [CONNECTION | QUERY] processlist_id
1, một cờ tiêu diệt cụ thể chủ đề được đặt cho luồng. Trong hầu hết các trường hợp, có thể mất một thời gian để chuỗi chết vì cờ giết chỉ được kiểm tra trong các khoảng thời gian cụ thể:

  • Trong các hoạt động ID0, với các vòng ID1 và ID2, cờ được kiểm tra sau khi đọc một khối hàng. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ.

  • ID3 Các hoạt động tạo bản sao bảng Kiểm tra cờ tiêu diệt định kỳ cho mỗi vài hàng được sao chép được đọc từ bảng gốc. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ và bảng tạm thời bị xóa.

    Tuyên bố

    KILL [CONNECTION | QUERY] processlist_id
    1 trả về mà không cần chờ xác nhận, nhưng kiểm tra cờ giết đã hủy bỏ hoạt động trong một khoảng thời gian hợp lý. Hủy bỏ hoạt động để thực hiện bất kỳ việc dọn dẹp cần thiết cũng mất một thời gian.

  • Trong các hoạt động ID5 hoặc ID6, cờ giết được kiểm tra sau mỗi khối đọc và sau mỗi hàng được cập nhật hoặc xóa. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ. Nếu bạn không sử dụng các giao dịch, các thay đổi không được quay lại.

  • ID7 Hủy bỏ và trả lại ID8.

  • Nếu luồng nằm trong bộ xử lý khóa bàn (trạng thái: ID9), khóa bảng nhanh chóng bị hủy bỏ.

  • Nếu luồng đang chờ dung lượng đĩa miễn phí trong một cuộc gọi ghi, việc ghi sẽ bị hủy bỏ với thông báo lỗi đầy đủ của đĩa.disk full error message.

  • INFORMATION_SCHEMA0 hủy bỏ và in hàng đầu ra đầu tiên. Điều này hoạt động trong MySQL 8.0.20 trở lên.

Cảnh báo

Giết một hoạt động INFORMATION_SCHEMA1 hoặc INFORMATION_SCHEMA2 trên bảng INFORMATION_SCHEMA3 dẫn đến một bảng bị hỏng và không sử dụng được. Bất kỳ lần đọc hoặc ghi vào bảng như vậy đều thất bại cho đến khi bạn tối ưu hóa hoặc sửa chữa lại (không bị gián đoạn).


13.7.6.4 & NBSP; Tuyên bố tiêu diệt

KILL [CONNECTION | QUERY] processlist_id

Mỗi kết nối với MySQLD chạy trong một luồng riêng. Bạn có thể giết một chủ đề bằng tuyên bố KILL processlist_id.mysqld runs in a separate thread. You can kill a thread with the KILL processlist_id statement.

Các định danh danh sách xử lý luồng có thể được xác định từ cột ID của bảng INFORMATION_SCHEMA PROCESSLIST, cột Id của đầu ra SHOW PROCESSLIST và cột PROCESSLIST_ID của bảng Lược đồ hiệu suất threads. Giá trị cho luồng hiện tại được trả về bởi hàm

KILL [CONNECTION | QUERY] processlist_id
0.

KILL [CONNECTION | QUERY] processlist_id
1 cho phép sửa đổi
KILL [CONNECTION | QUERY] processlist_id
2 hoặc
KILL [CONNECTION | QUERY] processlist_id
3 tùy chọn:

  • KILL [CONNECTION | QUERY] processlist_id
    4 giống như
    KILL [CONNECTION | QUERY] processlist_id
    1 không có công cụ sửa đổi: nó chấm dứt kết nối được liên kết với
    KILL [CONNECTION | QUERY] processlist_id
    6 đã cho, sau khi chấm dứt bất kỳ câu lệnh nào, kết nối đang thực thi.

  • KILL [CONNECTION | QUERY] processlist_id
    7 chấm dứt câu lệnh mà kết nối hiện đang thực thi, nhưng khiến bản thân kết nối vẫn còn nguyên.

Khả năng xem các chủ đề nào có sẵn để bị giết phụ thuộc vào đặc quyền

KILL [CONNECTION | QUERY] processlist_id
8:

  • Không có

    KILL [CONNECTION | QUERY] processlist_id
    8, bạn chỉ có thể thấy các chủ đề của riêng bạn.

  • Với

    KILL [CONNECTION | QUERY] processlist_id
    8, bạn có thể thấy tất cả các chủ đề.

Khả năng tiêu diệt các luồng và tuyên bố phụ thuộc vào đặc quyền KILL processlist_id2:

  • Không có KILL processlist_id2, bạn chỉ có thể giết các chủ đề và câu lệnh của riêng bạn.

  • Với KILL processlist_id2, bạn có thể giết tất cả các luồng và câu lệnh.

Bạn cũng có thể sử dụng Danh sách xử lý MySQLadmin và các lệnh giết MySQLadmin để kiểm tra và tiêu diệt các chủ đề.mysqladmin processlist and mysqladmin kill commands to examine and kill threads.

Ghi chú

Bạn không thể sử dụng

KILL [CONNECTION | QUERY] processlist_id
1 với thư viện máy chủ MySQL được nhúng vì máy chủ nhúng chỉ chạy bên trong các luồng của ứng dụng máy chủ. Nó không tạo ra bất kỳ luồng kết nối của riêng nó.

Khi bạn sử dụng

KILL [CONNECTION | QUERY] processlist_id
1, một cờ tiêu diệt cụ thể chủ đề được đặt cho luồng. Trong hầu hết các trường hợp, có thể mất một thời gian để chuỗi chết vì cờ giết chỉ được kiểm tra trong các khoảng thời gian cụ thể:

  • Trong các hoạt động ID0, với các vòng ID1 và ID2, cờ được kiểm tra sau khi đọc một khối hàng. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ.

  • ID3 Các hoạt động tạo bản sao bảng Kiểm tra cờ tiêu diệt định kỳ cho mỗi vài hàng được sao chép được đọc từ bảng gốc. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ và bảng tạm thời bị xóa.

    Tuyên bố

    KILL [CONNECTION | QUERY] processlist_id
    1 trả về mà không cần chờ xác nhận, nhưng kiểm tra cờ giết đã hủy bỏ hoạt động trong một khoảng thời gian hợp lý. Hủy bỏ hoạt động để thực hiện bất kỳ việc dọn dẹp cần thiết cũng mất một thời gian.

  • Trong các hoạt động ID5 hoặc ID6, cờ giết được kiểm tra sau mỗi khối đọc và sau mỗi hàng được cập nhật hoặc xóa. Nếu cờ giết được đặt, tuyên bố bị hủy bỏ. Nếu bạn không sử dụng các giao dịch, các thay đổi không được quay lại.

  • ID7 Hủy bỏ và trả lại ID8.

  • Nếu luồng nằm trong bộ xử lý khóa bàn (trạng thái: ID9), khóa bảng nhanh chóng bị hủy bỏ.

  • Nếu luồng đang chờ dung lượng đĩa miễn phí trong một cuộc gọi ghi, việc ghi sẽ bị hủy bỏ với thông báo lỗi đầy đủ của đĩa.disk full error message.

Cảnh báo

Giết một hoạt động INFORMATION_SCHEMA1 hoặc INFORMATION_SCHEMA2 trên bảng INFORMATION_SCHEMA3 dẫn đến một bảng bị hỏng và không sử dụng được. Bất kỳ lần đọc hoặc ghi vào bảng như vậy đều thất bại cho đến khi bạn tối ưu hóa hoặc sửa chữa lại (không bị gián đoạn).