Giới thiệu Mytop là một mã nguồn mở, công cụ dòng lệnh được sử dụng để giám sát hiệu suất MySQL. Nó được lấy cảm hứng từ các công cụ giám sát hệ thống Linux có tên là top và là tương tự với nó trong cái nhìn và cảm nhận.Mytop kết nối đến một máy chủ MySQL và định kỳ chạy hiển thị quá trình và hiển thị các lệnh tình trạng toàn cầu. Nó sau đó tóm tắt các thông tin trong một định dạng hữu ích. Sử dụng mytop, chúng tôi có thể giám sát (trong thời gian thực) luồng MySQL, truy vấn, và thời gian hoạt động cũng như thấy người dùng đang chạy các truy vấn cơ sở dữ liệu trên đó, đó là những truy vấn chậm, và nhiều hơn nữa. Tất cả các thông tin này có thể được sử dụng để tối ưu hóa hiệu suất máy chủ MySQL. Trong hướng dẫn này, chúng tôi sẽ thảo luận làm thế nào để cài đặt, cấu hình và sử dụng mytop. Điều kiện tiên quyết Trước khi bạn bắt đầu với hướng dẫn này, bạn cần phải có những điều sau đây: - CentOS 7 64-bit Droplet (làm việc với CentOS 6 cũng được) - Người sử dụng không phải root với quyền sudo. Để thiết lập một người sử dụng của loại hình này, hãy làm theo các cài đặt máy chủ ban đầu với CentOS 7 hướng dẫn. Tất cả các lệnh sẽ được chạy như người dùng này. - MySQL server chạy trên các Droplet. Bước 1 - Cài đặt Mytop Hãy để chúng tôi cài đặt các gói cần thiết cho mytop. Đầu tiên, chúng ta cần phải cài đặt các EPEL (Gói bổ sung cho Enterprise Linux) kho yum trên máy chủ. EPEL là một Fedora Special Interest Group tạo, bảo trì và quản lý một bộ chất lượng cao của mã nguồn mở thêm về các gói phần mềm cho Enterprise Linux. Chạy lệnh sau để cài đặt và kích hoạt các kho EPEL trên máy chủ của bạn: Trên CentOS 7: Mã: sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm Trên CentOS 6: Mã: 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, xác minh rằng các repo EPEL được kích hoạt sử dụng: Mã: sudo yum repolist Nếu được kích hoạt, bạn sẽ thấy những repo sau đây được liệt kê ở đầu ra: Mã: epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 Tiếp theo, chúng ta hãy bảo vệ các gói cơ bản từ EPEL sử dụng plugin protectbase yum. Mã: sudo yum install yum-plugin-protectbase.noarch -y Mục đích của các plugin protectbase là để bảo vệ kho yum nhất định từ thông tin cập nhật từ các kho khác. Gói trong kho được bảo vệ sẽ không được cập nhật hoặc ghi đè bởi các gói trong kho không được bảo vệ ngay cả khi kho không bị bảo vệ có một phiên bản sau này. Bây giờ chúng tôi đã sẵn sàng để cài đặt gói mytop. Chạy lệnh sau để cài đặt nó: Mã: sudo yum install mytop -y Điều này sẽ cài đặt các gói mytop cũng như tất 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, tạo ra một tập tin cấu hình tùy biến cho mytop tên .mytop. Chạy lệnh: Mã: sudo nano /root/.mytop và thêm các nội dung sau đây trong tập tin và lưu và thoát. Mã: /root/.mytop host=localhost db=mysql delay=5 port=3306 socket= batchmode=0 color=1 idle=1 Tập tin cấu hình này sẽ được sử dụng khi bạn chạy mytop trực tiếp như root và khi bạn chạy nó với lệnh sudo trước mặt nó như là một người sử dụng sudo không phải root. Bạn có thể thay đổi tập tin 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 trì hoãn xác định số lượng thời gian trong vài giây giữa làm mới màn hình. Nếu bạn muốn làm mới mytop hiển thị mỗi 3 giây, bạn có thể chỉnh sửa các tập tin /root/.mytop sử dụng Mã: sudo nano /root/.mytop và thay đổi như sau: Mã: delay=3 Các tham số idle quy định liệu có cho phép idle (ngủ) luồng xuất hiện trong danh sách ở màn hình hiển thị mytop. Mặc định là để hiển thị luồng idle. Nếu luồng idle được bỏ qua, thứ tự sắp xếp mặc định được đảo ngược để các truy vấn dài nhất xuất hiện ở đầu danh sách. Nếu bạn muốn làm điều này, chỉnh sửa các tập tin /root/.mytop và thay đổi như sau: Mã: idle=0 Bạn có thể tham khảo các trang hướng dẫn của mytop cho thông tin về tất cả các thông số trong tập tin cấu hình - nó có chứa một mô tả của mỗi tham số. Để truy cập vào các trang hướng dẫn, sử dụng lệnh: Mã: man mytop Bạn có thể gõ q để thoát hướng dẫn. Bước 3 - Kết nối với Mytop Trong phần này, chúng tôi sẽ thảo luận làm thế nào để kết nối với mytop và sử dụng nó để xem các truy vấn MySQL. Mytop yêu cầu quyền truy cập vào cơ sở dữ liệu, có thể được cung cấp thông qua một cửa sổ, trên dòng lệnh, hoặc được lưu trữ trong tập tin cấu hình. Để bảo mật tốt hơn, chúng tôi sẽ sử dụng các tùy chọn tới --prompt mytop, mà yêu cầu mật khẩu mỗi lần. Hãy để chúng tôi kết nối với mytop sử dụng: Mã: sudo mytop --prompt và nhập mật khẩu root MySQL tại cửa sổ. Bạn cũng có thể sử dụng một vài đối số dòng lệnh với lệnh mytop. Vui lòng tham khảo trang hướng dẫn cho danh sách đầy đủ. Ví dụ, nếu bạn muốn sử dụng một người sử dụng mysql khác nhau như sammy để kết nối với mytop, chạy lệnh: Mã: sudo -u mytop sammy --prompt Để kết nối và giám sát chỉ có một cơ sở dữ liệu cụ thể, bạn có thể sử dụng lệnh: Mã: sudo mytop -d databasename --prompt Để thoát khỏi mytop và trở về cửa sổ shell của bạn, gõ q. Bước 4 - Xem và giải thích hiển thị Mytop Trong phần này, chúng tôi sẽ xem làm thế nào để giải thích hiển thị mytop và các tính năng khác nhau được cung cấp bởi công cụ. Một khi chúng ta kết nối với mytop sử dụng mytop --prompt chúng ta sẽ được đưa đến luồng xem Nó sẽ hiển thị một cái gì đó tương tự như: Mã: Output of mytop MySQL 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ể lấy lại chế độ này, nếu bạn đang ở trong chế độ xem khác bằng cách gõ t. Màn hình hiển thị ở trên được chia thành hai phần. Bốn dòng đầu bao gồm các tiêu đề mà có thể được bật hoặc tắt bằng cách nhấn Shift-H. Các tiêu đề chứa thông tin tóm tắt về máy chủ MySQL của bạn. Dòng đầu tiên xác định tên máy chủ và các phiên bản của MySQL nó đang chạy. Phía bên phải cho thấy thời gian hoạt động của quá trình máy chủ MySQL trong định dạng ngày + giờ: phút: giây cũng như thời điểm hiện tại. Dòng thứ hai hiển thị tổng số truy vấn các máy chủ đã được xử lý (148 trong trường hợp của chúng tôi), số truy vấn trung bình mỗi giây, số lượng các truy vấn chậm, và tỷ lệ Select, Insert, Update và Delete câu truy vấn. Dòng thứ ba cho thấy giá trị thời gian thực từ làm mới mytop lần cuối. Việc làm mới (chậm trễ) thời gian bình thường cho mytop là 5 giây, vì vậy nếu 100 truy vấn được chạy trong 5 giây cuối cùng kể từ khi làm mới, thì QPS hiện giờ có số sẽ là 20. Trường đầu tiên là số lượng các truy vấn trên giây (QPS bây giờ: 2). Giá trị thứ hai là số lượng các truy vấn chậm mỗi giây. Các Luồng 6 (5/0) phân đoạn chỉ có tổng cộng 6 luồng kết nối, 5 đang hoạt động (một đang ngủ), và có 0 luồng trong bộ nhớ cache luồng. Các trường cuối cùng trong dòng thứ ba cho thấy tỷ lệ phần trăm truy vấn, như trong các dòng trước đó, nhưng kể từ khi làm mới mytop lần cuối. Dòng thứ tư hiển thị hiệu quả phím đệm (làm sao thường phím thường được đọc từ bộ đệm hơn là đĩa) và số byte mà MySQL đã được gửi và nhận, cả hai tổng thể và trong chu kỳ mytop lần cuối. Hiệu quả chính: 2,0% cho thấy 2% của các phím này được đọc từ bộ đệm, không phải từ đĩa. Bps in/out: 14.7 / 320.7k cho thấy rằng kể từ khi khởi động, MySQL có trung bình 14.7kbps lưu lượng gửi đến và 320.7kbps cho lưu lượng gửi đi. Bây giờ in/out cho thấy lưu lượng một lần nữa, nhưng kể từ khi làm mới mytop lần cuối. Phần thứ hai của màn hình hiển thị danh sách luồng MySQL hiện tại, được sắp xếp theo thời gian idle của mình (idle nhất đầu tiên). Bạn có thể đảo ngược thứ tự sắp xếp bằng cách nhấn O nếu cần thiết. Các thread id, tên người dùng, máy chủ mà người dùng kết nối cơ sở dữ liệu để người sử dụng được kết nối, số giây của thời gian idle, lệnh thread được thực hiện (hoặc trạng thái của chủ đề), và một phần đầu tiên của câu truy vấn thông tin đều được hiển thị ở đây. Nếu luồng là trong trạng thái truy vấn (nghĩa. Cmd hiển thị Query) sau đó cột tiếp theo Query hoặc State sẽ cho thấy phần đầu của các truy vấn đang được chạy. Nếu tình trạng lệnh là ngủ hoặc Idle thì Query hoặc State cột thường sẽ được để trống. Trong ví dụ đầu ra của chúng tôi ở trên, luồng với id 2 được thực mytop chạy truy vấn quá trình show để thu thập thông tin. Các chủ đề có id 16 đang ngủ (không xử lý một truy vấn, nhưng vẫn kết nối). Các chủ đề có id 17 đang chạy một truy vấn SELECT trên cơ sở dữ liệu TestDB. Bây giờ chúng ta đã hiểu được hiển thị cơ bản của mytop, chúng ta sẽ xem làm thế nào để sử dụng nó để thu thập thêm thông tin về luồng MySQL và truy vấn. Chúng ta hãy nhìn vào màn hình hiển thị mytop sau đây: Mã: [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 giao diện luồng mytop (mặc định) được hiển thị trên, các truy vấn được cắt ngắn. Để xem toàn bộ truy vấn, bạn có thể bấm phím F, và nó sẽ hỏi: Mã: Full query for which thread id: Nhập id thread cho truy vấn mà bạn muốn xem. Ví dụ, nhập 1244. Sau đó, nó sẽ hiển thị như sau: Mã: Thread 1244 was executing following query: SELECT * FROM dept_emp WHERE ... -- paused. press any key to resume or (e) to explain – Chúng tôi có thể gõ e để giải thích các truy vấn. Điều này sẽ giải thích các truy vấn đang được chạy để chúng ta có thể hình dung ra nếu truy vấn được tối ưu hóa. Giải thích là một trong những công cụ mạnh mẽ nhất cho sự hiểu biết và tối ưu hóa các truy vấn MySQL phiền hà. Ví dụ: Mã: 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 phím bất kỳ để thoát khỏi chế độ này hoặc gõ t để đi trở lại xem luồng mặc định. Một góc nhìn khác hữu ích có sẵn trong mytop là quan điểm lệnh. Để truy cập vào xem lệnh, loại c. Nó sẽ trông giống như sau: Mã: 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 cho thấy các loại lệnh hoặc truy vấn được chạy. Cột tổng cộng đại diện cho tổng số là loại lệnh chạy từ máy chủ bắt đầu, 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, chúng tôi có các cột cuối cho chúng ta biết số lượng của loại lệnh chạy kể từ khi làm mới cuối cùng của mytop. Thông tin này cho chúng ta cái nhìn sâu sắc vào những gì các máy chủ MySQL đang làm trong ngắn hạn và dài hạn.