MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Điều cần kiểm tra xem Mức độ sử dụng I / O của MySQL có cao không

Hiệu suất I / O rất quan trọng đối với cơ sở dữ liệu MySQL. Dữ liệu được đọc và ghi vào đĩa ở nhiều nơi. Làm lại nhật ký, không gian bảng, nhật ký nhị phân và chuyển tiếp. Với sự gia tăng của việc sử dụng ổ đĩa trạng thái rắn, hiệu suất I / O đã tăng lên đáng kể cho phép người dùng đẩy cơ sở dữ liệu của họ nhanh hơn nhưng ngay cả khi đó I / O có thể trở thành điểm nghẽn và là yếu tố hạn chế hiệu suất của toàn bộ cơ sở dữ liệu. Trong bài đăng trên blog này, chúng tôi sẽ xem xét những điều bạn muốn kiểm tra nếu bạn nhận thấy hiệu suất I / O của mình cao trên phiên bản MySQL của bạn.

Sử dụng I / O “Cao” nghĩa là gì? Trong ngắn hạn, nếu hiệu suất của cơ sở dữ liệu của bạn bị ảnh hưởng bởi nó, thì nó là cao. Thông thường, bạn sẽ nhận thấy nó khi ghi chậm lại trong cơ sở dữ liệu. Nó cũng sẽ biểu hiện rõ ràng là thời gian chờ I / O cao trên hệ thống của bạn. Xin lưu ý, mặc dù vậy, trên các máy chủ có 32 lõi CPU trở lên, ngay cả khi một lõi hiển thị 100% I / O chờ, bạn có thể không nhận thấy nó trên chế độ xem tổng hợp - nó sẽ chỉ đại diện cho 1/32 toàn bộ tải . Có vẻ như không ảnh hưởng nhưng trên thực tế, một số hoạt động I / O đơn luồng đang bão hòa CPU của bạn và một số ứng dụng đang chờ hoạt động I / O đó kết thúc.

Giả sử chúng tôi đã nhận thấy hoạt động I / O tăng lên, chỉ như trong ảnh chụp màn hình ở trên. Xem gì nếu bạn nhận thấy hoạt động I / O cao? Đầu tiên, hãy kiểm tra danh sách các tiến trình trong hệ thống. Cơ quan nào chịu trách nhiệm cho việc chờ đợi I / O? Bạn có thể sử dụng iotop để kiểm tra điều đó:

Trong trường hợp của chúng tôi, rõ ràng là MySQL chịu trách nhiệm về phần lớn của nó. Chúng ta nên bắt đầu với kiểm tra đơn giản nhất - chính xác thì cái gì đang chạy trong MySQL ngay bây giờ?

Chúng tôi có thể thấy có hoạt động sao chép trên nô lệ của chúng tôi. Điều gì đang xảy ra với chủ nhân?

Chúng ta có thể thấy rõ ràng một số công việc tải hàng loạt đang chạy. Kiểu này kết thúc hành trình của chúng tôi ở đây vì chúng tôi đã tìm cách xác định vấn đề một cách khá dễ dàng.

Tuy nhiên, có những trường hợp khác, có thể không dễ hiểu và dễ theo dõi. MySQL đi kèm với một số thiết bị đo lường nhằm giúp hiểu hoạt động I / O trong hệ thống. Như chúng tôi đã đề cập, I / O có thể được tạo ở nhiều nơi trong hệ thống. Chữ viết là những thứ rõ ràng nhất nhưng chúng tôi cũng có thể có các bảng tạm thời trên đĩa - thật tốt khi xem các truy vấn của bạn có sử dụng các bảng như vậy hay không.

Nếu bạn đã bật performance_schema, một cách để kiểm tra tệp nào chịu trách nhiệm về tải I / O có thể là truy vấn ‘table_io_waits_summary_by_table’:

*************************** 13. row ***************************

                FILE_NAME: /tmp/MYfd=68

               EVENT_NAME: wait/io/file/sql/io_cache

    OBJECT_INSTANCE_BEGIN: 140332382801216

               COUNT_STAR: 17208

           SUM_TIMER_WAIT: 23332563327000

           MIN_TIMER_WAIT: 1596000

           AVG_TIMER_WAIT: 1355913500

           MAX_TIMER_WAIT: 389600380500

               COUNT_READ: 10888

           SUM_TIMER_READ: 20108066180000

           MIN_TIMER_READ: 2798750

           AVG_TIMER_READ: 1846809750

           MAX_TIMER_READ: 389600380500

 SUM_NUMBER_OF_BYTES_READ: 377372793

              COUNT_WRITE: 6318

          SUM_TIMER_WRITE: 3224434875000

          MIN_TIMER_WRITE: 16699500

          AVG_TIMER_WRITE: 510356750

          MAX_TIMER_WRITE: 223219960500

SUM_NUMBER_OF_BYTES_WRITE: 414000000

               COUNT_MISC: 2

           SUM_TIMER_MISC: 62272000

           MIN_TIMER_MISC: 1596000

           AVG_TIMER_MISC: 31136000

           MAX_TIMER_MISC: 60676000

*************************** 14. row ***************************

                FILE_NAME: /tmp/Innodb Merge Temp File

               EVENT_NAME: wait/io/file/innodb/innodb_temp_file

    OBJECT_INSTANCE_BEGIN: 140332382780800

               COUNT_STAR: 1128

           SUM_TIMER_WAIT: 16465339114500

           MIN_TIMER_WAIT: 8490250

           AVG_TIMER_WAIT: 14596931750

           MAX_TIMER_WAIT: 583930037500

               COUNT_READ: 540

           SUM_TIMER_READ: 15103082275500

           MIN_TIMER_READ: 111663250

           AVG_TIMER_READ: 27968670750

           MAX_TIMER_READ: 583930037500

 SUM_NUMBER_OF_BYTES_READ: 566231040

              COUNT_WRITE: 540

          SUM_TIMER_WRITE: 1234847420750

          MIN_TIMER_WRITE: 286167500

          AVG_TIMER_WRITE: 2286754250

          MAX_TIMER_WRITE: 223758795000

SUM_NUMBER_OF_BYTES_WRITE: 566231040

               COUNT_MISC: 48

           SUM_TIMER_MISC: 127409418250

           MIN_TIMER_MISC: 8490250

           AVG_TIMER_MISC: 2654362750

           MAX_TIMER_MISC: 43409881500

Như bạn thấy ở trên, nó cũng hiển thị các bảng tạm thời đang được sử dụng.

Để kiểm tra kỹ xem một truy vấn cụ thể có sử dụng bảng tạm thời hay không, bạn có thể sử dụng GIẢI THÍCH CHO KẾT NỐI:

mysql> EXPLAIN FOR CONNECTION 3111\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: sbtest1

   partitions: NULL

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 986400

     filtered: 100.00

        Extra: Using temporary; Using filesort

1 row in set (0.16 sec)

Trong ví dụ trên, một bảng tạm thời được sử dụng cho tệp sắp xếp.

Một cách khác để theo dõi hoạt động của ổ đĩa là, nếu bạn tình cờ sử dụng Máy chủ Percona cho MySQL, hãy bật toàn bộ độ dài nhật ký chậm:

mysql> SET GLOBAL log_slow_verbosity='full';

Query OK, 0 rows affected (0.00 sec)

Sau đó, trong nhật ký chậm, bạn có thể thấy các mục nhập như sau:

# Time: 2020-01-31T12:05:29.190549Z

# [email protected]: root[root] @ localhost []  Id: 12395

# Schema:   Last_errno: 0  Killed: 0

# Query_time: 43.260389  Lock_time: 0.031185 Rows_sent: 1000000  Rows_examined: 2000000 Rows_affected: 0

# Bytes_sent: 197889110  Tmp_tables: 0 Tmp_disk_tables: 0  Tmp_table_sizes: 0

# InnoDB_trx_id: 0

# Full_scan: Yes  Full_join: No Tmp_table: No  Tmp_table_on_disk: No

# Filesort: Yes  Filesort_on_disk: Yes  Merge_passes: 141

#   InnoDB_IO_r_ops: 9476  InnoDB_IO_r_bytes: 155254784  InnoDB_IO_r_wait: 5.304944

#   InnoDB_rec_lock_wait: 0.000000  InnoDB_queue_wait: 0.000000

#   InnoDB_pages_distinct: 8191

SET timestamp=1580472285;

SELECT * FROM sbtest.sbtest1 ORDER BY RAND();

Như bạn thấy, bạn có thể biết liệu có một bảng tạm thời trên đĩa hay dữ liệu đã được sắp xếp trên đĩa hay chưa. Bạn cũng có thể kiểm tra số lượng hoạt động I / O và lượng dữ liệu được truy cập.

Chúng tôi hy vọng bài đăng trên blog này sẽ giúp bạn hiểu hoạt động I / O trong hệ thống và giúp bạn quản lý nó tốt hơn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB &Dữ liệu bên ngoài

  2. Giám sát hiệu suất MariaDB trong một đám mây lai

  3. Tổng kết năm 2018:7 cột mốc quan trọng của MariaDB mà bạn có thể đã bỏ lỡ

  4. Cách làm cho cơ sở dữ liệu MySQL hoặc MariaDB của bạn khả dụng cao trên AWS và Google Cloud

  5. Cách FROM_UNIXTIME () hoạt động trong MariaDB