ProxySQL hiện đã nhận được rất nhiều sự quan tâm trong thế giới cơ sở dữ liệu MySQL và MariaDB, chưa kể ClickHouse giúp tạo nên trường hợp cho ProxySQL.
Có thể nói rằng ProxySQL đã trở thành proxy cơ sở dữ liệu mặc định cho dòng cơ sở dữ liệu MySQL (chẳng hạn như Percona Server, Oracle MySQL, Galera Cluster hoặc thậm chí với MariaDB).
ProxySQL trên thực tế là một trình giải quyết vấn đề hiệu quả với các chức năng vô cùng phong phú quản lý giao tiếp máy khách-máy chủ cơ sở dữ liệu; hoạt động như phần mềm trung gian theo một cách tiếp cận rất tiên tiến và hiệu quả.
Nó có khả năng định hình lưu lượng cơ sở dữ liệu bằng cách trì hoãn, lưu vào bộ nhớ đệm hoặc viết lại các truy vấn một cách nhanh chóng. Nó cũng có thể được sử dụng để tạo ra một môi trường trong đó chuyển đổi dự phòng sẽ không ảnh hưởng đến các ứng dụng và sẽ minh bạch đối với chúng. Cộng đồng ProxySQL rất nhạy bén và liên tục xây dựng các bản sửa lỗi, bản vá và phát hành phiên bản kịp thời.
Nhưng thiết lập ProxySQL của bạn hoạt động như thế nào và làm thế nào bạn có thể xác định rằng thiết lập của mình đã được điều chỉnh chính xác? Blog này tập trung vào việc xác định hiệu suất của các nút ProxySQL của bạn và cách giám sát nó hiệu quả.
Các vấn đề thường gặp mà bạn có thể gặp phải với ProxySQL
Cài đặt mặc định của ProxySQL đi kèm với một công cụ điều chỉnh đơn giản, nhẹ có thể xử lý tải từ trung bình đến nặng. Mặc dù điều này có thể phụ thuộc vào loại truy vấn được gửi đến phần mềm trung gian, nhưng nó có thể tác động và bắt đầu gặp phải tình trạng tắc nghẽn và độ trễ.
Vấn đề về Độ trễ
Ví dụ:khó xác định điều gì có thể dẫn đến độ trễ nếu bạn thiếu hệ thống giám sát. Tương tự như vậy, bạn có thể theo dõi hoặc kiểm tra giản đồ thống kê theo cách thủ công giống như bên dưới:
mysql> select * from stats_mysql_connection_pool\G
*************************** 1. row ***************************
hostgroup: 20
srv_host: 192.168.10.225
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 0
ConnOK: 0
ConnERR: 0
MaxConnUsed: 0
Queries: 0
Queries_GTID_sync: 0
Bytes_data_sent: 0
Bytes_data_recv: 0
Latency_us: 1151
*************************** 2. row ***************************
hostgroup: 20
srv_host: 192.168.10.226
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 0
ConnOK: 0
ConnERR: 0
MaxConnUsed: 0
Queries: 0
Queries_GTID_sync: 0
Bytes_data_sent: 0
Bytes_data_recv: 0
Latency_us: 470
*************************** 3. row ***************************
hostgroup: 10
srv_host: 192.168.10.227
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 0
ConnOK: 0
ConnERR: 0
MaxConnUsed: 0
Queries: 0
Queries_GTID_sync: 0
Bytes_data_sent: 0
Bytes_data_recv: 0
Latency_us: 10855
*************************** 4. row ***************************
hostgroup: 40
srv_host: 192.168.10.225
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 0
ConnOK: 0
ConnERR: 0
MaxConnUsed: 0
Queries: 0
Queries_GTID_sync: 0
Bytes_data_sent: 0
Bytes_data_recv: 0
Latency_us: 1151
*************************** 5. row ***************************
hostgroup: 40
srv_host: 192.168.10.226
srv_port: 3306
status: ONLINE
ConnUsed: 0
ConnFree: 0
ConnOK: 0
ConnERR: 0
MaxConnUsed: 0
Queries: 0
Queries_GTID_sync: 0
Bytes_data_sent: 0
Bytes_data_recv: 0
Latency_us: 470
5 rows in set (0.01 sec)
Điều này cho phép bạn theo dõi độ trễ dựa trên nhóm máy chủ. Nhưng nó sẽ làm tăng thêm sự phức tạp trừ khi bạn phải đổi mới và phát triển (các) tập lệnh sẽ quản lý để thông báo cho bạn.
Lỗi Kết nối Máy khách
Thời gian chờ kết nối tối đa do các kết nối tối đa trong phần phụ trợ (chính nút cơ sở dữ liệu) có thể khiến bạn bối rối nếu bạn không thể xác định đâu là nguồn chính của sự cố. Tuy nhiên, bạn có thể kiểm tra cơ sở dữ liệu thống kê để kiểm tra các kết nối bị hủy bỏ như vậy trong máy khách hoặc thậm chí máy chủ và nó bị từ chối kết nối như sau,
mysql> select * from stats.stats_mysql_global where variable_name like '%connect%';
+-------------------------------------+----------------+
| Variable_Name | Variable_Value |
+-------------------------------------+----------------+
| Client_Connections_aborted | 0 |
| Client_Connections_connected | 205 |
| Client_Connections_created | 10067 |
| Server_Connections_aborted | 44 |
| Server_Connections_connected | 30 |
| Server_Connections_created | 14892 |
| Server_Connections_delayed | 0 |
| Client_Connections_non_idle | 205 |
| Access_Denied_Max_Connections | 0 |
| Access_Denied_Max_User_Connections | 0 |
| MySQL_Monitor_connect_check_OK | 41350 |
| MySQL_Monitor_connect_check_ERR | 92 |
| max_connect_timeouts | 0 |
| Client_Connections_hostgroup_locked | 0 |
| mysql_killed_backend_connections | 0 |
+-------------------------------------+----------------+
15 rows in set (0.01 sec)
Nó cũng lý tưởng nếu bạn có thể xác minh và kiểm tra số lượng kết nối tối đa của người dùng phụ trợ để xem số lượng giới hạn kết nối mà nó có thể mở hoặc sử dụng. Ví dụ:tôi có những điều sau trong bài kiểm tra của mình,
mysql> select username, active, transaction_persistent, max_connections from mysql_users;
+---------------+--------+------------------------+-----------------+
| username | active | transaction_persistent | max_connections |
+---------------+--------+------------------------+-----------------+
| proxydemo | 1 | 1 | 10000 |
| proxysql-paul | 1 | 1 | 10000 |
+---------------+--------+------------------------+-----------------+
2 rows in set (0.00 sec)
Truy vấn chậm
Việc xác định các truy vấn chậm không khó trong ProxySQL, nhưng nó có thể không hiệu quả nếu được thực hiện theo cách thủ công. Bạn có thể kiểm tra điều này nếu thực hiện thủ công với biến,
mysql> select * from stats_mysql_global where variable_name like '%slow%';
+---------------+----------------+
| Variable_Name | Variable_Value |
+---------------+----------------+
| Slow_queries | 2 |
+---------------+----------------+
1 row in set (0.00 sec)
Mặc dù điều đó có thể cung cấp cho bạn một số con số, nhưng bạn có thể kiểm tra bảng stats_mysql_query_digest trong lược đồ thống kê nếu bạn muốn tìm hiểu sâu hơn. Ví dụ bên dưới,
mysql> select count_star,sum_time,(sum_time/count_star)/1000 as average_time_ms,digest_text
-> from stats_mysql_query_digest
-> where count_star > 100 order by average_time_ms desc limit 10;
+------------+----------+-----------------+--------------------------------------+
| count_star | sum_time | average_time_ms | digest_text |
+------------+----------+-----------------+--------------------------------------+
| 884 | 15083961 | 17 | UPDATE sbtest1 SET k=k+? WHERE id=? |
| 930 | 16000111 | 17 | UPDATE sbtest9 SET k=k+? WHERE id=? |
| 914 | 15695810 | 17 | UPDATE sbtest4 SET k=k+? WHERE id=? |
| 874 | 14467420 | 16 | UPDATE sbtest8 SET k=k+? WHERE id=? |
| 904 | 15294520 | 16 | UPDATE sbtest3 SET k=k+? WHERE id=? |
| 917 | 15228077 | 16 | UPDATE sbtest6 SET k=k+? WHERE id=? |
| 907 | 14613238 | 16 | UPDATE sbtest2 SET k=k+? WHERE id=? |
| 900 | 15113004 | 16 | UPDATE sbtest5 SET k=k+? WHERE id=? |
| 917 | 15299381 | 16 | UPDATE sbtest7 SET k=k+? WHERE id=? |
| 883 | 15010119 | 16 | UPDATE sbtest10 SET k=k+? WHERE id=? |
+------------+----------+-----------------+--------------------------------------+
10 rows in set (0.01 sec)
bắt được 10 truy vấn chậm hàng đầu dựa trên việc lấy mẫu bằng 100.
Sử dụng bộ nhớ
Các mục phần cứng như CPU, Đĩa và Bộ nhớ phải được giám sát để đảm bảo rằng ProxySQL của bạn hoạt động hiệu quả. Tuy nhiên, điều quan trọng nhất là bộ nhớ, vì ProxySQL sẽ sử dụng rất nhiều trong bộ nhớ do cơ chế bộ nhớ đệm truy vấn. Theo mặc định, bộ đệm truy vấn, phụ thuộc vào biến mysql-query_cache_size_MB được mặc định là 256 Mib. Về vấn đề đó, nó có thể dẫn đến tình huống sử dụng bộ nhớ và bạn cần xác định và chẩn đoán nếu bạn tìm thấy sự cố trong nút ProxySQL của mình hoặc thậm chí được nhận thấy trong lớp ứng dụng.
Khi xác định điều này, bạn có thể kết thúc việc kiểm tra các bảng trong lược đồ stats_history và thống kê. Bạn có thể xem danh sách các bảng có thể giúp bạn trong quá trình chẩn đoán,
mysql> show tables from stats;
| stats_memory_metrics |
19 rows in set (0.00 sec)
or,
mysql> show tables from stats_history;
+------------------------+
| tables |
+------------------------+
| mysql_connections |
| mysql_connections_day |
| mysql_connections_hour |
| mysql_query_cache |
| mysql_query_cache_day |
| mysql_query_cache_hour |
| system_cpu |
| system_cpu_day |
| system_cpu_hour |
| system_memory |
| system_memory_day |
| system_memory_hour |
+------------------------+
15 rows in set (0.00 sec)
Xác định hiệu quả Hiệu suất của ProxySQL của bạn
Có nhiều cách để xác định hiệu suất của nút ProxySQL của bạn. Sử dụng ClusterControl cung cấp cho bạn khả năng xác định điều này bằng các biểu đồ đơn giản nhưng dễ hiểu. Ví dụ:khi ProxySQL được tích hợp vào cụm của bạn, bạn sẽ có thể đặt quy tắc truy vấn, thay đổi max_connections của người dùng, xác định các truy vấn hàng đầu, thay đổi nhóm máy chủ người dùng và cung cấp cho bạn hiệu suất của nút ProxySQL. Xem ảnh chụp màn hình bên dưới ...
Tất cả những gì bạn thấy là bằng chứng về cách ClusterControl có thể cung cấp cho bạn thông tin chi tiết về hiệu suất của nút ProxySQL của bạn. Nhưng điều này không giới hạn bạn ở điều đó. ClusterControl cũng có các bảng điều khiển phong phú và mạnh mẽ mà chúng tôi gọi là SCUMM, bao gồm bảng điều khiển Tổng quan về ProxySQL.
Nếu bạn định xác định các truy vấn chậm, bạn có thể chỉ cần xem qua trang tổng quan. Kiểm tra phân phối độ trễ của bạn trên các nhóm máy chủ khác nhau nơi các nút phụ trợ của bạn được chỉ định giúp bạn có cái nhìn sâu sắc về hiệu suất dựa trên phân phối. Bạn có thể giám sát các kết nối máy khách và máy chủ, cung cấp cho bạn thông tin chi tiết về bộ đệm truy vấn. Quan trọng nhất và không kém phần quan trọng, nó cung cấp cho bạn khả năng sử dụng bộ nhớ mà nút ProxySQL đang sử dụng. Xem các biểu đồ bên dưới ...
Các biểu đồ này là một phần của trang tổng quan, giúp bạn dễ dàng xác định hiệu suất của nút ProxySQL của bạn.
ClusterControl không giới hạn bạn khi xử lý ProxySQL. Ngoài ra, có một tính năng phong phú ở đây, nơi bạn cũng có thể sao lưu hoặc nhập cấu hình, điều này rất quan trọng khi bạn xử lý tính khả dụng cao cho các nút ProxySQL của mình.
Kết luận
Việc theo dõi và xác định xem bạn có gặp vấn đề gì với ProxySQL hay không chưa bao giờ dễ dàng hơn thế. Giống như trong ví dụ của blog này, chúng tôi đang giới thiệu ClusterControl như một công cụ có thể cung cấp cho bạn hiệu quả và cung cấp cho bạn thông tin chi tiết để xác định các vấn đề còn tồn tại mà bạn đang giải quyết với các vấn đề liên quan đến hiệu suất của mình.