Giới hạn sử dụng CPU MySQL

Tôi đang gặp phải tình trạng sử dụng CPU cao trên Amazon Relational Database Service [Amazon RDS] cho các phiên bản Cơ sở dữ liệu MySQL hoặc các phiên bản Amazon Aurora Phiên bản tương thích với MySQL của tôi. Làm cách nào tôi có thể khắc phục sự cố và giải quyết tình trạng sử dụng CPU cao?

Mô tả ngắn

Việc tăng hiệu suất sử dụng CPU có thể do một số yếu tố gây ra, chẳng hạn như khối lượng công việc nặng do người dùng thực hiện, nhiều truy vấn đồng thời hoặc các giao dịch chạy trong thời gian dài

Để xác định nguồn sử dụng CPU trong phiên bản Amazon RDS for MySQL của bạn, hãy xem xét các phương pháp sau

  • Tăng cường giám sát
  • Thông tin chi tiết về hiệu suất
  • Các truy vấn phát hiện nguyên nhân sử dụng CPU trong khối lượng công việc
  • Nhật ký với giám sát được kích hoạt

Sau khi bạn xác định nguồn, bạn có thể phân tích và tối ưu hóa khối lượng công việc của mình để giảm mức sử dụng CPU

Nghị quyết

Sử dụng giám sát nâng cao

Giám sát nâng cao cung cấp chế độ xem ở cấp hệ điều hành [OS]. Chế độ xem này có thể giúp xác định nguyên nhân tải CPU cao ở cấp độ chi tiết. Ví dụ: bạn có thể xem lại mức trung bình tải, phân phối CPU [% hệ thống hoặc tốt đẹp%] và danh sách quy trình HĐH

Sử dụng Giám sát nâng cao, bạn có thể kiểm tra dữ liệu loadAverageMinute trong khoảng thời gian 1, 5 và 15 phút. Mức tải trung bình lớn hơn số lượng vCPU cho biết rằng phiên bản đang chịu tải nặng. Ngoài ra, nếu mức tải trung bình ít hơn số lượng vCPU cho lớp phiên bản CSDL, thì việc tiết chế CPU có thể không phải là nguyên nhân gây ra độ trễ của ứng dụng. Kiểm tra tải trung bình để tránh dương tính giả khi chẩn đoán nguyên nhân sử dụng CPU

Ví dụ: nếu bạn có một phiên bản CSDL đang sử dụng một db. m5. 2xlarge với 3000 IOPS được cung cấp đạt đến giới hạn CPU, bạn có thể xem lại các chỉ số ví dụ sau để xác định nguyên nhân gốc rễ của việc sử dụng CPU cao. Trong ví dụ sau, lớp phiên bản có tám vCPU được liên kết với nó. Đối với cùng mức tải trung bình, vượt quá 170 cho biết máy đang chịu tải nặng trong khung thời gian đo được

Tải phút trung bình

Ghi chú. Amazon RDS cung cấp cho khối lượng công việc của bạn mức độ ưu tiên cao hơn so với các tác vụ khác đang chạy trên phiên bản CSDL. Để ưu tiên các tác vụ này, các tác vụ khối lượng công việc có giá trị Nice cao hơn. Do đó, trong Giám sát nâng cao, Nice% biểu thị lượng CPU được sử dụng bởi khối lượng công việc của bạn đối với cơ sở dữ liệu

Sau khi bật Giám sát nâng cao, bạn cũng có thể kiểm tra danh sách quy trình HĐH được liên kết với phiên bản CSDL. Giám sát nâng cao hiển thị tối đa 100 quy trình. Điều này có thể giúp bạn xác định quy trình nào có tác động lớn nhất đến hiệu suất dựa trên việc sử dụng CPU và bộ nhớ

Trong phần danh sách quy trình hệ điều hành [OS] của Giám sát nâng cao, hãy xem xét các quy trình OS và quy trình RDS. Xác nhận tỷ lệ sử dụng CPU của quy trình mysqld hoặc Aurora. Các số liệu này có thể giúp bạn xác nhận xem việc tăng hiệu suất sử dụng CPU là do HĐH hay do các quy trình RDS gây ra. Hoặc, bạn có thể sử dụng các số liệu này để theo dõi mọi mức tăng sử dụng CPU do mysqld hoặc Aurora gây ra. Bạn cũng có thể xem sự phân chia mức sử dụng CPU bằng cách xem xét các chỉ số cho cpuUtilization. Để biết thêm thông tin, hãy xem Giám sát số liệu hệ điều hành với Giám sát nâng cao

Ghi chú. Nếu bạn kích hoạt Lược đồ hiệu suất, thì bạn có thể ánh xạ ID luồng hệ điều hành với ID tiến trình của cơ sở dữ liệu của bạn. Để biết thêm thông tin, hãy xem Tại sao phiên bản CSDL Amazon RDS của tôi lại sử dụng bộ nhớ hoán đổi khi tôi có đủ bộ nhớ?

Sử dụng thông tin chi tiết về hiệu suất

Sử dụng truy vấn để phát hiện nguyên nhân sử dụng CPU trong khối lượng công việc

Trước khi bạn có thể tối ưu hóa khối lượng công việc của mình, bạn phải xác định truy vấn có vấn đề. Bạn có thể chạy các truy vấn sau trong khi xảy ra sự cố CPU cao để xác định nguyên nhân gốc rễ của việc sử dụng CPU. Sau đó, tối ưu hóa khối lượng công việc của bạn để giảm mức sử dụng CPU của bạn

Lệnh SHOW PROCESSLIST hiển thị cho bạn các luồng hiện đang chạy trên phiên bản MySQL của bạn. Đôi khi, cùng một nhóm câu lệnh có thể tiếp tục chạy mà không hoàn thành. Khi điều này xảy ra, các câu lệnh tiếp theo phải đợi tập hợp các câu lệnh đầu tiên kết thúc. Điều này là do khóa cấp hàng InnoDB có thể đang cập nhật các hàng giống nhau. Để biết thêm thông tin, hãy xem câu lệnh SHOW PROCESSLIST trên trang web MySQL

Ghi chú. Chạy truy vấn SHOW PROCESSLIST với tư cách là người dùng hệ thống chính. Nếu bạn không phải là người dùng hệ thống chính, thì bạn phải có quyền quản trị máy chủ MySQL PROCESS để xem tất cả các luồng đang chạy trên phiên bản MySQL. Không có đặc quyền của quản trị viên, SHOW PROCESSLIST chỉ hiển thị các luồng được liên kết với tài khoản MySQL mà bạn đang sử dụng

Bảng INNODB_TRX cung cấp thông tin về tất cả các giao dịch InnoDB hiện đang chạy không phải là giao dịch chỉ đọc

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

Bảng INNODB_LOCKS cung cấp thông tin về các khóa mà giao dịch InnoDB đã yêu cầu nhưng chưa nhận được

Đối với MySQL 5. 7 hoặc sớm hơn

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

SELECT * FROM performance_schema.data_locks;

Bảng INNODB_LOCK_WAITS cung cấp một hoặc nhiều hàng cho mỗi giao dịch InnoDB bị chặn

Đối với MySQL 5. 7 hoặc sớm hơn

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

SELECT * FROM performance_schema.data_lock_waits;

Bạn có thể chạy một truy vấn tương tự như sau để xem các giao dịch đang chờ và các giao dịch đang chặn các giao dịch đang chờ. Để biết thêm thông tin, hãy xem Sử dụng thông tin khóa và giao dịch InnoDB trên trang web MySQL

Đối với MySQL 5. 7 hoặc sớm hơn

SELECT
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM       information_schema.innodb_lock_waits w
INNER JOIN information_schema.innodb_trx b
  ON b.trx_id = w.blocking_trx_id
INNER JOIN information_schema.innodb_trx r
  ON r.trx_id = w.requesting_trx_id;

SELECT
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM       performance_schema.data_lock_waits w
INNER JOIN information_schema.innodb_trx b
  ON b.trx_id = w.blocking_engine_transaction_id
INNER JOIN information_schema.innodb_trx r
  ON r.trx_id = w.requesting_engine_transaction_id;

Truy vấn SHOW ENGINE INNODB STATUS cung cấp thông tin từ màn hình InnoDB tiêu chuẩn về trạng thái của công cụ lưu trữ InnoDB. Để biết thêm thông tin, hãy xem câu lệnh SHOW ENGINE trên trang web MySQL

SHOW ENGINE INNODB STATUS;

HIỂN THỊ [ TOÀN CẦU. SESSION] STATUS cung cấp thông tin về trạng thái máy chủ. Để biết thêm thông tin, hãy xem câu lệnh SHOW STATUS trên trang web MySQL

Ghi chú. Các truy vấn này đã được thử nghiệm trên Aurora 2. x [MySQL 5. 7]; . x [MySQL 5. 6]; . x. Ngoài ra, INFORMATION_SCHEMA. Bảng INNODB_LOCKS không còn được hỗ trợ kể từ MySQL 5. 7. 14 và bị xóa trong MySQL 8. 0. hiệu suất_lược đồ. bảng data_locks thay thế INFORMATION_SCHEMA. Bảng INNODB_LOCKS. Để biết thêm thông tin, hãy xem Bảng data_locks trên trang web MySQL

Phân tích nhật ký và bật giám sát

Khi bạn phân tích nhật ký hoặc muốn kích hoạt tính năng giám sát trong Amazon RDS for MySQL, hãy xem xét các phương pháp sau

  • Phân tích Nhật ký truy vấn chung của MySQL để xem mysqld đang làm gì tại một thời điểm cụ thể. Bạn cũng có thể xem các truy vấn đang chạy trên phiên bản của mình tại một thời điểm cụ thể, bao gồm thông tin về thời điểm máy khách kết nối hoặc ngắt kết nối. Để biết thêm thông tin, hãy xem Nhật ký truy vấn chung trên trang web MySQL.
    Lưu ý. Khi bạn kích hoạt Nhật ký truy vấn chung trong thời gian dài, nhật ký sẽ sử dụng dung lượng lưu trữ và có thể thêm vào chi phí hoạt động.
  • Phân tích Nhật ký truy vấn chậm của MySQL để tìm các truy vấn mất nhiều thời gian chạy hơn số giây mà bạn đặt cho long_query_time. Bạn cũng có thể xem lại khối lượng công việc và phân tích các truy vấn của mình để cải thiện hiệu suất và mức tiêu thụ bộ nhớ. Để biết thêm thông tin, hãy xem Nhật ký truy vấn chậm trên trang web MySQL. Mẹo. Khi bạn sử dụng Nhật ký truy vấn chậm hoặc Nhật ký truy vấn chung, hãy đặt tham số log_output thành FILE
  • Sử dụng Plugin kiểm tra MariaDB để kiểm tra hoạt động cơ sở dữ liệu. Ví dụ: bạn có thể theo dõi người dùng đang đăng nhập vào cơ sở dữ liệu hoặc các truy vấn đang chạy trên cơ sở dữ liệu. Để biết thêm thông tin, hãy xem hỗ trợ Plugin kiểm tra MariaDB
  • Nếu bạn sử dụng Aurora cho MySQL thì bạn cũng có thể sử dụng Kiểm tra nâng cao. Kiểm tra có thể cung cấp cho bạn nhiều quyền kiểm soát hơn đối với các loại truy vấn bạn muốn ghi lại. Làm như vậy sẽ giảm chi phí đăng nhập
  • Sử dụng tham số innodb_print_all_deadlocks để kiểm tra các bế tắc và khóa tài nguyên. Bạn có thể sử dụng tham số này để ghi lại thông tin về các bế tắc trong giao dịch người dùng InnoDB trong nhật ký lỗi MySQL. Để biết thêm thông tin, hãy xem innodb_print_all_deadlocks trên trang web MySQL

Phân tích và tối ưu hóa khối lượng công việc CPU cao

Sau khi bạn xác định truy vấn đang làm tăng mức sử dụng CPU, hãy tối ưu hóa khối lượng công việc của bạn để giảm mức tiêu thụ CPU

Nếu bạn thấy một truy vấn không cần thiết cho khối lượng công việc của mình, bạn có thể ngắt kết nối bằng lệnh sau

________số 8

Để tìm processID của truy vấn, hãy chạy lệnh SHOW FULL PROCESSLIST

Nếu bạn không muốn kết thúc truy vấn, hãy tối ưu hóa truy vấn bằng cách sử dụng GIẢI THÍCH. Lệnh EXPLAIN hiển thị các bước riêng lẻ liên quan đến việc chạy truy vấn. Để biết thêm thông tin, hãy xem Tối ưu hóa truy vấn với GIẢI THÍCH trên trang web MySQL

Để xem lại chi tiết hồ sơ, kích hoạt PROFILING. Lệnh PROFILING có thể chỉ ra việc sử dụng tài nguyên cho các câu lệnh đang chạy trong phiên hiện tại. Để biết thêm thông tin, hãy xem câu lệnh SHOW PROFILE trên trang web MySQL

Để cập nhật bất kỳ thống kê bảng nào, hãy sử dụng ANALYZE TABLE. Lệnh ANALYZE TABLE có thể giúp trình tối ưu hóa chọn một kế hoạch thích hợp để chạy truy vấn. Để biết thêm thông tin, hãy xem câu lệnh ANALYZE TABLE trên trang web MySQL

Tại sao mức sử dụng CPU MySQL cao?

Việc tăng hiệu suất sử dụng CPU có thể do một số yếu tố gây ra, chẳng hạn như khối lượng công việc nặng do người dùng thực hiện, nhiều truy vấn đồng thời hoặc giao dịch kéo dài. To identify the source of the CPU usage in your Amazon RDS for MySQL instance, review the following approaches: Enhanced Monitoring. Performance Insights.

Cách dễ nhất để giảm mức sử dụng CPU của cơ sở dữ liệu SQL của bạn là gì?

Trong bài viết này .
Bước 1. Xác minh rằng SQL Server đang gây ra mức sử dụng CPU cao
Bước 2. Xác định các truy vấn góp phần vào việc sử dụng CPU
Bước 3. Cập nhật số liệu thống kê
Bước 4. Thêm các chỉ mục còn thiếu
Bước 5. Điều tra và giải quyết các vấn đề nhạy cảm với thông số
Bước 6. Điều tra và giải quyết các vấn đề SARGability
Bước 7. Vô hiệu hóa theo dõi nặng

MySQL có giới hạn không?

MySQL có giới hạn cố định là 4096 cột trên mỗi bảng , nhưng mức tối đa hiệu quả có thể ít hơn đối với một bảng nhất định. Giới hạn cột chính xác phụ thuộc vào một số yếu tố. Kích thước hàng tối đa cho một bảng hạn chế số lượng [và có thể là kích thước] cột vì tổng chiều dài của tất cả các cột không thể vượt quá kích thước này.

MySQL có thể sử dụng nhiều lõi không?

Có. MySQL hoàn toàn đa luồng và sử dụng tất cả các CPU được cung cấp cho nó .

Chủ Đề