Cách sử dụng Mytop để theo dõi hiệu suất MySQL
Mytop là một công cụ dòng lệnh open-souce được sử dụng để theo dõi hiệu suất của MySQL. Nó được lấy cảm hứng từ công cụ giám sát hệ thống Linux có tên hàng đầu và giống với công cụ này về giao diện. Mytop kết nối với server MySQL và chạy định kỳ danh sách xử lýshow processlist
và show global status
các lệnh show global status
. Sau đó, nó tóm tắt thông tin ở một định dạng hữu ích. Sử dụng mytop, ta có thể theo dõi (trong thời gian thực) các stream , truy vấn và thời gian hoạt động của MySQL cũng như xem user nào đang chạy truy vấn trên database nào, truy vấn chậm, v.v. Tất cả thông tin này được dùng để tối ưu hóa hiệu suất server MySQL. Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt, cấu hình và sử dụng mytop.
Yêu cầu
Trước khi bắt đầu với hướng dẫn này, bạn nên có những điều sau:
- CentOS 7 64-bit Server (cũng hoạt động với CentOS 6)
- User không phải root có quyền sudo. Để cài đặt user kiểu này, hãy làm theo hướng dẫn Cài đặt server ban đầu với CentOS 7 . Tất cả các lệnh sẽ được chạy với quyền user này.
- Server MySQL chạy trên Server. Để cài đặt MySQL, hãy làm theo Bước # 2 của bài viết Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên CentOS .
Bước 1 - Cài đặt Mytop
Hãy để ta cài đặt các gói cần thiết cho mytop.
Đầu tiên, ta cần cài đặt repository yum EPEL (Extra Packages for Enterprise Linux) trên server . EPEL là Group lợi ích đặc biệt của Fedora tạo ra, duy trì và quản lý một bộ phần mềm bổ trợ open-souce chất lượng cao cho Enterprise Linux. Chạy lệnh sau để cài đặt và kích hoạt kho EPEL trên server của bạn:
Trên CentOS 7:
- sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
Trên CentOS 6:
- sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Trước khi tiếp tục, hãy xác minh repo EPEL được bật bằng cách sử dụng:
- sudo yum repolist
Nếu được bật, bạn sẽ thấy repo sau được liệt kê trong kết quả :
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64
Tiếp theo, ta hãy bảo vệ các gói cơ sở từ EPEL sử dụng yum Plugin protectbase.
- sudo yum install yum-plugin-protectbase.noarch -y
Mục đích của plugin protectbase là bảo vệ một số repository yum nhất định khỏi các bản cập nhật từ các repository khác. Các gói trong repositories lưu trữ được bảo vệ sẽ không được cập nhật hoặc overrides bởi các gói trong repositories không được bảo vệ ngay cả khi kho không được bảo vệ có version mới hơn.
Bây giờ ta đã sẵn sàng để cài đặt gói mytop. Chạy lệnh sau để cài đặt nó:
- sudo yum install mytop -y
Điều này sẽ cài đặt gói mytop cũng như tất cả các phụ thuộc của nó, chủ yếu là các module perl.
Bước 2 - Cấu hình Mytop
Trước khi sử dụng mytop, hãy tạo file cấu hình tùy chỉnh cho mytop có tên .mytop
. Chạy lệnh:
- sudo nano /root/.mytop
và thêm nội dung sau vào file và lưu và thoát.
host=localhost db=mysql delay=5 port=3306 socket= batchmode=0 color=1 idle=1
Tệp cấu hình này sẽ được sử dụng khi bạn chạy mytop trực tiếp dưới dạng root và khi bạn chạy nó bằng sudo
ở phía trước nó với quyền là user sudo không phải root.
Bạn có thể áp dụng các thay đổi đối với file cấu hình này tùy thuộc vào nhu cầu của bạn . Ví dụ: tùy chọn delay
chỉ định lượng thời gian tính bằng giây giữa các lần làm mới màn hình. Nếu bạn muốn làm mới màn hình mytop 3 giây một lần, bạn có thể chỉnh sửa file /root/.mytop
bằng cách sử dụng
- sudo nano /root/.mytop
và thay đổi những điều sau:
delay=3
Tham số idle
chỉ định xem có cho phép các chủ đề không hoạt động (đang ngủ) xuất hiện trong danh sách trên màn hình hiển thị mytop hay không. Mặc định là hiển thị các chủ đề nhàn rỗi. Nếu các stream nhàn rỗi bị bỏ qua, thứ tự sắp xếp mặc định sẽ được đảo ngược để các truy vấn chạy lâu nhất xuất hiện ở đầu danh sách. Nếu bạn muốn thực hiện việc này, hãy chỉnh sửa file /root/.mytop
và thay đổi những điều sau:
idle=0
Bạn có thể tham khảo các trang hướng dẫn sử dụng của mytop để biết thông tin về tất cả các thông số trong file cấu hình - nó chứa mô tả của từng thông số. Để truy cập trang hướng dẫn sử dụng, hãy sử dụng lệnh:
- man mytop
Bạn có thể gõ q
để thoát khỏi thủ công.
Bước 3 - Kết nối với Mytop
Trong phần này, ta sẽ thảo luận về cách kết nối với mytop và sử dụng nó để xem các truy vấn MySQL.
Mytop yêu cầu thông tin đăng nhập để truy cập database , có thể được cung cấp qua dấu nhắc, trên dòng lệnh hoặc được lưu trữ trong file cấu hình. Để bảo mật tốt hơn, ta sẽ sử dụng tùy chọn --prompt
để mytop, tùy chọn này sẽ yêu cầu password mỗi lần.
Hãy để ta kết nối với mytop bằng:
- sudo mytop --prompt
và nhập password root MySQL tại dấu nhắc. Bạn cũng có thể sử dụng một số đối số dòng lệnh với lệnh mytop
. Vui lòng tham khảo trang hướng dẫn sử dụng để có danh sách đầy đủ. Ví dụ: nếu bạn muốn sử dụng một user mysql khác như sammy để kết nối với mytop, hãy chạy lệnh:
- sudo mytop -u sammy --prompt
Để chỉ kết nối và giám sát một database cụ thể, bạn có thể sử dụng lệnh:
- sudo mytop -d databasename --prompt
Để thoát khỏi mytop và quay lại dấu nhắc shell , hãy nhập q
.
Bước 4 - Xem và diễn giải màn hình Mytop
Trong phần này, ta sẽ xem cách diễn giải màn hình mytop và các tính năng khác nhau được cung cấp bởi công cụ.
Sau khi ta kết nối với mytop bằng cách sử dụng mytop --prompt
ta sẽ được đưa đến chế độ xem chuỗi . Nó sẽ hiển thị một cái gì đó tương tự như:
Output of mytopMySQL on localhost (5.5.41-MariaDB) up 0+00:05:52 [01:33:15] Queries: 148 qps: 0 Slow: 0.0 Se/In/Up/De(%): 09/00/00/00 qps now: 2 Slow qps: 0.0 Threads: 6 ( 5/ 0) 67/00/00/00 Key Efficiency: 2.0% Bps in/out: 14.7/320.7k Now in/out: 192.5/731.8k Id User Host/IP DB Time Cmd Query or State -- ---- ------- -- ---- --- ---------- 2 root localhost mysql 0 Query show full processlist 16 root localhost 0 Sleep 17 root localhost testdb 0 Query SELECT * FROM dept_emp 18 root localhost testdb 0 Query SELECT * FROM dept_emp 19 root localhost testdb 0 Query SELECT * FROM dept_emp 20 root localhost testdb 0 Query SELECT * FROM dept_emp
Bạn có thể quay lại chế độ xem này nếu bạn đang ở chế độ xem khác bằng lệnh t
.
Màn hình hiển thị trên bị vỡ thành hai phần. Bốn dòng trên cùng bao gồm tiêu đề có thể được bật hoặc tắt bằng cách nhấn SHIFT-H . Tiêu đề chứa thông tin tóm tắt về server MySQL của bạn.
Dòng đầu tiên xác định tên server của server và version MySQL mà nó đang chạy. Phía bên tay phải hiển thị thời gian hoạt động của quy trình server MySQL theo định dạng ngày + giờ: phút: giây cũng như thời gian hiện tại.
Dòng thứ hai hiển thị tổng số truy vấn mà server đã xử lý (trong trường hợp của ta là 148), số truy vấn trung bình mỗi giây, số lượng truy vấn chậm và tỷ lệ các truy vấn Chọn, Chèn, Cập nhật và Xóa.
Dòng thứ ba hiển thị các giá trị thời gian thực kể từ lần làm mới trên mytop lần cuối. Thời gian làm mới (độ trễ) thông thường cho mytop là 5 giây, vì vậy nếu 100 truy vấn được chạy trong 5 giây qua kể từ khi làm mới, thì số
qps now
sẽ là 20. Trường đầu tiên là số truy vấn mỗi giây (qps now: 2
). Giá trị thứ hai là số lượng truy vấn chậm mỗi giây. Phân đoạnThreads: 6 ( 5/ 0)
cho biết có tổng số 6 stream được kết nối, 5 stream đang hoạt động (một stream đang ở chế độ ngủ) và có 0 stream trong bộ nhớ cache của stream . Trường cuối cùng trong dòng thứ ba hiển thị tỷ lệ phần trăm truy vấn, giống như trong dòng trước, nhưng kể từ lần làm mới trên đỉnh cuối cùng.Dòng thứ tư hiển thị hiệu quả của cache khóa (tần suất các khóa được đọc từ cache chứ không phải đĩa) và số byte mà MySQL đã gửi và nhận, cả về tổng thể và trong chu kỳ mytop cuối cùng.
Key Efficiency: 2.0%
cho thấy 2% số khóa được đọc từ cache , không phải từ đĩa.Bps in/out: 14.7/320.7k
cho thấy kể từ khi khởi động, MySQL đã đạt trung bình 14,7kbps đối với lưu lượng vào và 320,7kbps đối với lưu lượng đi.Now in/out
hiển thị lại lưu lượng truy cập, nhưng kể từ lần làm mớiNow in/out
đỉnh cao nhất.
Phần thứ hai của màn hình liệt kê các stream MySQL hiện tại, được sắp xếp theo thời gian nhàn rỗi của chúng (ít nhàn rỗi nhất trước). Bạn có thể đảo ngược thứ tự sắp xếp bằng cách nhấn O nếu cần. Id stream , tên user , server lưu trữ mà user đang kết nối, database mà user được kết nối, số giây thời gian nhàn rỗi, lệnh mà stream đang thực thi (hoặc trạng thái của stream ) và phần đầu tiên của truy vấn thông tin đều được hiển thị ở đây. Nếu stream đang ở trạng thái Truy vấn (tức là Cmd
hiển thị Truy vấn ) thì cột tiếp theo Query or State
sẽ hiển thị phần đầu tiên của truy vấn đang được chạy. Nếu trạng thái lệnh là Ngủ hoặc Chờ thì cột Query or State
thường sẽ trống. Trong kết quả ví dụ của ta ở trên, stream có id 2 thực sự đang chạy truy vấn danh sách xử lý show processlist
để thu thập thông tin. Luồng có id 16 đang ngủ (không xử lý truy vấn, nhưng vẫn được kết nối). Luồng có id 17 đang chạy truy vấn SELECT trên database testdb .
Bây giờ ta đã hiểu về cách hiển thị cơ bản của mytop, ta sẽ xem cách sử dụng nó để thu thập thêm thông tin về các chuỗi và truy vấn MySQL. Hãy để ta xem qua màn hình hiển thị mytop sau:
[secondary_output Output of mytop] MySQL on localhost (5.5.41-MariaDB) up 0+00:13:10 [23:54:45] Queries: 2.8k qps: 4 Slow: 51.0 Se/In/Up/De(%): 45/00/00/00 qps now: 17 Slow qps: 0.0 Threads: 52 ( 51/ 0) 96/00/00/00 Key Efficiency: 100.0% Bps in/out: 215.4/ 7.6M Now in/out: 2.0k/16.2M Id User Host/IP DB Time Cmd Query or State -- ---- ------- -- ---- --- ---------- 34 root localhost testdb 0 Query show full processlist 1241 root localhost 1 Sleep 1242 root localhost testdb 1 Query SELECT * FROM dept_emp 1243 root localhost testdb 1 Query SELECT * FROM dept_emp 1244 root localhost testdb 1 Query SELECT * FROM dept_emp 1245 root localhost testdb 1 Query SELECT * FROM dept_emp 1246 root localhost testdb 1 Query SELECT * FROM dept_emp 1247 root localhost testdb 1 Query SELECT * FROM dept_emp
Trong chế độ xem chuỗi mytop ( chế độ xem mặc định) được hiển thị ở trên, các truy vấn được cắt bớt. Để xem toàn bộ truy vấn, bạn có thể nhấn F và nó sẽ hỏi:
Full query for which thread id:
Nhập id chuỗi cho truy vấn bạn muốn xem. Ví dụ: nhập 1244
. Sau đó, nó sẽ hiển thị như sau:
Thread 1244 was executing following query: SELECT * FROM dept_emp WHERE ... -- paused. press any key to resume or (e) to explain --
Ta có thể gõ e
để giải thích truy vấn. Điều này sẽ giải thích truy vấn đang được chạy để ta có thể tìm hiểu xem truy vấn có được tối ưu hóa hay không. EXPLAIN là một trong những công cụ mạnh mẽ nhất để hiểu và tối ưu hóa các truy vấn MySQL rắc rối. Ví dụ:
EXPLAIN SELECT * FROM dept_emp: *** row 1 *** table: dept_emp type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 332289 Extra: NULL -- paused. press any key to resume --
Bạn có thể nhấn bất kỳ phím nào để thoát khỏi chế độ này hoặc gõ t
để quay lại chế độ xem chuỗi mặc định.
Một dạng xem hữu ích khác có sẵn trong mytop là dạng xem lệnh. Để truy cập dạng xem lệnh, hãy nhập c
. Nó trông giống như sau :
Command Total Pct | Last Pct ------- ----- --- | ---- --- select 1782 55% | 100 8% show status 723 22% | 533 45% show processlist 708 22% | 532 45% change db 2 0% | 0 0% show variables 1 0% | 0 0% Compression 0 0% | 0 0%
Cột Command
hiển thị loại lệnh hoặc truy vấn đang được chạy. Cột Total
là viết tắt của tổng số loại lệnh đó được chạy kể từ khi server khởi động và cột Pct
hiển thị cùng một tỷ lệ phần trăm. Ở phía bên kia của đường thẳng đứng, ta có cột Last
cho ta biết số loại lệnh đó đã chạy kể từ lần làm mới cuối cùng của mytop. Thông tin này cung cấp cho ta cái nhìn sâu sắc về những gì server MySQL đang làm trong ngắn hạn và dài hạn.
Ta đã thảo luận về một số tính năng quan trọng và hữu ích của mytop trong hướng dẫn này. Có nhiều người khác có sẵn. Để xem danh sách đầy đủ các tùy chọn, bạn có thể nhấn ? trong khi mytop đang chạy.
Kết luận
Đến đây bạn đã hiểu rõ về cách sử dụng mytop để giám sát server MySQL của bạn . Đây cũng là điểm khởi đầu để tìm ra các truy vấn SQL có vấn đề và tối ưu hóa chúng, do đó tăng hiệu suất tổng thể của server . Bạn có thể biết thêm thông tin về cách tối ưu hóa các truy vấn và bảng MySQL trên server của bạn trong hướng dẫn này .
Các tin liên quan
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên CentOS 72015-04-24
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên Ubuntu 14.04
2015-04-21
Cách chuẩn bị cho việc nâng cấp MySQL 5.7 của bạn
2015-04-20
Cách sử dụng MySQL hoặc MariaDB với Ứng dụng Django của bạn trên Ubuntu 14.04
2015-03-24
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 14.04
2015-03-18
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên CentOS 7
2015-03-17
Cách đo hiệu suất truy vấn MySQL với mysqlslap
2014-10-02
Cách di chuyển database MySQL sang server mới trên Ubuntu 14.04
2014-05-22
Cách tối ưu hóa hiệu suất WordPress với MySQL Replication trên Ubuntu 14.04
2014-05-21
Cách sử dụng profile truy vấn MySQL
2014-04-07