ProxySQL官档翻译__09_ProxySQL配置之系统库_03_stats库

09_ProxySQL配置之系统库_03_stats库

备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入
~
~
统计[STATS (statistics)]

stats库[The stats database]

此数据库包含了有关ProxySQL对其内部功能进行数据收集的指标。在这里,您将找到有关某些计数器被触发的频率以及通过ProxySQL执行查询的时间等信息。
需要说明的是:
1)只有使用admin-stats_credentials凭据接入的管理员用户才能访问该Schema。
2)通常,通过检查内存中的数据结构,当执行针对这些指标的SQL查询时,将动态填充此数据库中的表。

Admin>SHOW TABLES FROM stats;
+--------------------------------------+
| tables                               |
+--------------------------------------+
| global_variables                     |
| stats_memory_metrics                 |
| stats_mysql_commands_counters        |
| stats_mysql_connection_pool          |
| stats_mysql_connection_pool_reset    |
| stats_mysql_errors                   |
| stats_mysql_errors_reset             |
| stats_mysql_global                   |
| stats_mysql_gtid_executed            |
| stats_mysql_prepared_statements_info |
| stats_mysql_processlist              |
| stats_mysql_query_digest             |
| stats_mysql_query_digest_reset       |
| stats_mysql_query_rules              |
| stats_mysql_users                    |
| stats_proxysql_servers_checksums     |
| stats_proxysql_servers_metrics       |
| stats_proxysql_servers_status        |
+--------------------------------------+
18 rows in set (0.00 sec)

1、global_variables

表stats.global_variables仅用于促成连接池通过发出SELECT @@max_allowed_pa​​cket或类似的查询来建立连接。
其内容如下,是可以忽略的:

Admin>SELECT * FROM stats.global_variables;
+--------------------------+----------------+
| variable_name            | variable_value |
+--------------------------+----------------+
| mysql-max_allowed_packet | 4194304        |
+--------------------------+----------------+
1 row in set (0.01 sec)

2、stats_memory_metrics

Admin>SELECT * FROM stats.stats_memory_metrics;
+------------------------------+----------------+
| Variable_Name                | Variable_Value |
+------------------------------+----------------+
| SQLite3_memory_bytes         | 3152560        |
| jemalloc_resident            | 11894784       |
| jemalloc_active              | 10059776       |
| jemalloc_allocated           | 8550184        |
| jemalloc_mapped              | 25165824       |
| jemalloc_metadata            | 1831872        |
| jemalloc_retained            | 0              |
| Auth_memory                  | 1468           |
| query_digest_memory          | 0              |
| mysql_query_rules_memory     | 3985           |
| stack_memory_mysql_threads   | 41943040       |
| stack_memory_admin_threads   | 20971520       |
| stack_memory_cluster_threads | 0              |
+------------------------------+----------------+
13 rows in set (0.00 sec)

此表用于显示ProxySQL内各种结构的内存使用情况。
在当前,只跟踪了很少的结构(SQLite, Auth module, Query Digests),但是将来会跟踪更多内部结构,导出更多指标。
此表中要监控的最重要的值是与jemalloc(在ProxySQL内部构建的内存分配器)相关的值。有关各种值的详细说明,请访问jemalloc网站(http://jemalloc.net/jemalloc.3.html)。

简而言之:
jemalloc_allocated :应用程序分配的字节数。
jemalloc_active :应用程序分配的页的总字节数。
jemalloc_mapped :分配器地址映射后的总字节数。
jemalloc_metadata :专用于元数据的字节数。
jemalloc_resident :分配器映射的物理驻留数据页中的字节数。
Auth_memory :身份验证模块用于存储用户凭据和属性的内存
SQLite3_memory_bytes :嵌入式SQLite使用的内存
query_digest_memory :用于存储与stats_mysql_query_digest相关的数据的内存。

3、stats_mysql_commands_counters

表stats_mysql_commands_counters用于保存被执行的所有类型查询的记录,并根据执行时间收集统计信息,将它们分组到相应的类型中存储:

Admin>SELECT * FROM stats_mysql_commands_counters ORDER BY Total_cnt DESC LIMIT 1 \G;
*************************** 1. row ***************************
      Command: ALTER_TABLE
Total_Time_us: 0
    Total_cnt: 0
    cnt_100us: 0
    cnt_500us: 0
      cnt_1ms: 0
      cnt_5ms: 0
     cnt_10ms: 0
     cnt_50ms: 0
    cnt_100ms: 0
    cnt_500ms: 0
       cnt_1s: 0
       cnt_5s: 0
      cnt_10s: 0
     cnt_INFs: 0
1 row in set (0.00 sec)

以上字段具有以下语义:
command :已执行的SQL命令的类型。例如:FLUSH, INSERT, KILL, SELECT FOR UPDATE等。
Total_Time_us :执行该类型命令所花费的总时间,单位:微秒。
total_cnt :执行的该类型命令的总数。
cnt_100us, cnt_500us, ..., cnt_10s, cnt_INFs :在指定时间限制内执行的给定类型的命令总数(记录值不包括前一个范围内的值)。
例如,cnt_500us是在500微秒内执行的命令数,但只记录超过100微秒(因为还有一个cnt_100us字段)。cnt_INFs是执行超过10秒的命令数。

注意:仅当全局变量mysql-commands_stats设置为true时,才会处理表stats_mysql_commands_counters的统计信息。默认mysql-commands_stats为true的,这是为了用于对其他查询的处理(不仅仅为了这里的信息统计)。建议不要禁用它。

4、stats_mysql_connection_pool

以下是用于创建stats_mysql_connection_pool表的语句:

Admin>show create table stats.stats_mysql_connection_pool \G;
*************************** 1. row ***************************
       table: stats_mysql_connection_pool
Create Table: CREATE TABLE stats_mysql_connection_pool (
    hostgroup INT,
    srv_host VARCHAR,
    srv_port INT,
    status VARCHAR,
    ConnUsed INT,
    ConnFree INT,
    ConnOK INT,
    ConnERR INT,
    MaxConnUsed INT,
    Queries INT,
    Queries_GTID_sync INT,
    Bytes_data_sent INT,
    Bytes_data_recv INT,
    Latency_us INT)
1 row in set (0.00 sec)

每行代表一个主机组内的后端服务器。这些字段具有以下语义:
hostgroup :后端服务器所属的主机组。请注意,单个后端服务器可以属于多个主机组。
srv_host, srv_port :mysqld后端服务器正在侦听连接的地址、TCP端点
status :后端服务器的状态。可以是ONLINE, SHUNNED, OFFLINE_SOFT, OFFLINE_HARD。有关每种状态的含义的详细信息,请参阅上面mysql_servers表(09_ProxySQL配置之系统库_01_main库MEMORY层表和RUNTIME层表.txt)的说明。
ConnUsed :ProxySQL当前使用多少个连接来向后端服务器发送查询。
ConnFree :目前有多少个连接是空闲(Free)的。它们需要保持打开状态,以便最大限度地减少向后端服务器发送查询的时间成本(免去建立连接的时间)。
ConnOK :连接建立成功的数量。
ConnERR :建立连接失败的数量。
MaxConnUsed :
Queries :路由到此特定后端服务器的查询数。
Queries_GTID_sync :
Bytes_data_sent :发送到后端的数据量,单位Byte。这不包括元数据(数据包头)
Bytes_data_recv :从后端接收到的数据量,单位Byte。这不包括元数据(数据包头、OK/ERR数据包、字段的描述等)
Latency_us :从Monitor报告的当前ping的时间,即延时(单位:微秒)

此表输出有关后端服务器的统计信息。服务器根据其主机组,地址和端口进行标识,并统计与连接、查询和流量相关的可用信息。
例如:

Admin> SELECT hostgroup hg, srv_host, status, ConnUsed, ConnFree, ConnOK, ConnERR FROM stats_mysql_connection_pool WHERE ConnUsed+ConnFree > 0 ORDER BY hg, srv_host;
+----+-------------------+--------+----------+----------+--------+---------+
| hg | srv_host          | status | ConnUsed | ConnFree | ConnOK | ConnERR |
+----+-------------------+--------+----------+----------+--------+---------+
| 10 | back001-db-master | ONLINE | 69       | 423      | 524    | 0       |
| 11 | back001-db-master | ONLINE | 0        | 1        | 1      | 0       |
| 11 | back001-db-reader | ONLINE | 0        | 11       | 11     | 0       |
| 20 | back002-db-master | ONLINE | 9        | 188      | 197    | 2       |
| 21 | back002-db-reader | ONLINE | 0        | 1        | 1      | 0       |
| 31 | back003-db-master | ONLINE | 0        | 3        | 3      | 0       |
| 31 | back003-db-reader | ONLINE | 1        | 70       | 71     | 0       |
+----+-------------------+--------+----------+----------+--------+---------+
7 rows in set (0.00 sec)

Admin> SELECT hostgroup hg, srv_host, Queries, Bytes_data_sent, Bytes_data_recv, Latency_us FROM stats_mysql_connection_pool WHERE ConnUsed+ConnFree > 0 ORDER BY hg, srv_host;
+----+-------------------+---------+-----------------+-----------------+------------+
| hg | srv_host          | Queries | Bytes_data_sent | Bytes_data_recv | Latency_us |
+----+-------------------+---------+-----------------+-----------------+------------+
| 10 | back001-db-master | 8970367 | 9858463664      | 145193069937    | 17684      |
| 11 | back001-db-master | 69      | 187675          | 2903            | 17684      |
| 11 | back001-db-reader | 63488   | 163690013       | 4994101         | 113        |
| 20 | back002-db-master | 849461  | 1086994186      | 266034339       | 101981     |
| 21 | back002-db-reader | 8       | 6992            | 984             | 230        |
| 31 | back003-db-master | 3276    | 712803          | 81438709        | 231        |
| 31 | back003-db-reader | 2356904 | 411900849       | 115810708275    | 230        |
+----+-------------------+---------+-----------------+-----------------+------------+
7 rows in set (0.00 sec)

在以上内容中,可能需要关注一下多路复用是如何有效工作的(其使用的连接很少)。

5、stats_mysql_connection_pool_reset

查询表stats_mysql_connection_pool_reset等效于查询stats_mysql_connection_pool,唯一的区别是对于reset表,所有统计信息在SELECT语句结束时都重置为0。

6、stats_mysql_errors

ToDo==>正在研发

7、stats_mysql_errors_reset

ToDo==>正在研发

8、stats_mysql_global

在stats模式中最重要的表之一是stats_mysql_global,它给出了与各种ProxySQL内部相关的计数器。

以下是用于创建stats_mysql_global表的语句:

Admin>show create table stats.stats_mysql_global \G;
*************************** 1. row ***************************
       table: stats_mysql_global
Create Table: CREATE TABLE stats_mysql_global (
    Variable_Name VARCHAR NOT NULL PRIMARY KEY,
    Variable_Value VARCHAR NOT NULL)
1 row in set (0.00 sec)

表中的每行记录代表与MySQL相关的代理(proxy)级别的全局统计信息,包括:
*)Key Memory Usage(主要内存的使用情况)
*)Prepared Statements(预处理语句)
*)Query Cache(查询缓存)
*)Processing Time(处理时长)
*)Global Connections(全局连接)
*)Threads / Workers(线程/workers)
*)Connection Pooling(连接池)
*)Transactions(事务)
*)SQL Statements(SQL语句)

使用select * from stats.stats_mysql_global和使用SHOW MYSQL STATUS命令可以获得相同的输出。

例如:

Admin>select * from stats.stats_mysql_global limit 5;
+------------------------------+----------------+
| Variable_Name                | Variable_Value |
+------------------------------+----------------+
| ProxySQL_Uptime              | 176016         |
| Active_Transactions          | 0              |
| Client_Connections_aborted   | 0              |
| Client_Connections_connected | 0              |
| Client_Connections_created   | 0              |
+------------------------------+----------------+
5 rows in set (0.00 sec)

变量描述:
Access_Denied_Max_Connections ==>
Access_Denied_Max_User_Connections ==>
Access_Denied_Wrong_Password ==>
Active_Transactions ==>提供当前正在处理事务的客户端连接数的计数。
Backend_query_time_nsec ==>花在与后端MySQL服务器进行网络通信的时间。
Client_Connections_aborted ==>客户端连接失败(或未正确关闭)的计数。
Client_Connections_connected ==>当前保持连接的客户端连接数。
Client_Connections_created ==>创建的客户端连接总数。
Client_Connections_non_idle ==>当前被主工作线程处理的客户端连接数。如果ProxySQL没有使用--idle-threads运行,则Client_Connections_non_idle始终等于Client_Connections_connected
Com_autocommit ==>
Com_autocommit_filtered ==>
Com_backend_change_user ==>
Com_backend_init_db ==>
Com_backend_set_names ==>
Com_backend_stmt_close ==>表示ProxySQL针对后端执行的"CLOSE"的数量。在当前版本中该值始终为0,因为ProxySQL从不关闭prepared语句,因为它效率低(网络通信会被浪费)。相反,当在后端连接达到'mysql-max_stmts_per_connection'阀值时,连接会被返回到连接池并进行重置(这时隐式关闭所有prepared语句)
Com_backend_stmt_execute ==>表示ProxySQL针对后端执行的"EXECUTE"的数量。其应与Com_frontend_stmt_execute大致匹配。
Com_backend_stmt_prepare ==>表示ProxySQL针对后端执行的"PREPARE"的数量。在可能的情况下ProxySQL会跨连接跟踪和重用prepared语句,因此该值通常远小于Com_frontend_stmt_prepare。
Com_commit ==>
Com_commit_filtered ==>
Com_frontend_init_db ==>
Com_frontend_set_names ==>
Com_frontend_stmt_close ==>表示客户端执行的"CLOSE"的数量。
Com_frontend_stmt_execute ==>表示客户端执行的"EXECUTE"的数量。
Com_frontend_stmt_prepare ==>表示客户端执行的"PREPARE"的数量。客户端通常执行一个语句需要经过prepare、execute、close过程,这样这3个度量值通常几乎相同。
Com_frontend_use_db ==>
Com_rollback ==>
Com_rollback_filtered ==>
ConnPool_get_conn_failure ==>从连接池中获取连接失败以及创建新连接或没有可用后端的请求数。
ConnPool_get_conn_immediate ==>MySQL线程从其自己的本地连接池缓存(指MySQL服务自己的连接池)中获取的连接数。仅当存在高并发性时,该值才会很大。
ConnPool_get_conn_success ==>从连接池中成功获取已有连接的请求数。
ConnPool_memory_bytes ==>连接池用于存储连接元数据的内存。
GTID_consistent_queries ==>
GTID_session_collected ==>
Mirror_concurrency ==>
Mirror_queue_length ==>
MyHGM_myconnpoll_destroy ==>被认为存在异常而被关闭的连接的数量。
MyHGM_myconnpoll_get ==>对连接池发出的请求数。
MyHGM_myconnpoll_get_ok ==>对连接池的成功请求数(即连接可用)。
MyHGM_myconnpoll_push ==>返回连接池的连接数。
MyHGM_myconnpoll_reset ==>使用'COM_CHANGE_USER'重置/重新初始化的连接数。
MySQL_Monitor_Workers ==>监视器线程数。默认情况下,它是工作线程数(MySQL_Monitor_Workers列)的两倍,最初限制为16,而后会根据监控队列中待检查任务的多少,来自动创建更多的线程。监视线程执行监控阻塞网络操作,不消耗太多CPU。
MySQL_Monitor_Workers_Aux ==>
MySQL_Monitor_Workers_Started ==>
MySQL_Monitor_connect_check_ERR ==>
MySQL_Monitor_connect_check_OK ==>
MySQL_Monitor_ping_check_ERR ==>
MySQL_Monitor_ping_check_OK ==>
MySQL_Monitor_read_only_check_ERR ==>
MySQL_Monitor_read_only_check_OK ==>
MySQL_Monitor_replication_lag_check_ERR ==>
MySQL_Monitor_replication_lag_check_OK ==>
MySQL_Thread_Workers ==>MySQL的(工作)线程数,即mysql-threads参数值。
ProxySQL_Uptime ==>ProxySQL的总运行时间,以秒为单位。
Queries_backends_bytes_recv ==>
Queries_backends_bytes_sent ==>
Queries_frontends_bytes_recv ==>
Queries_frontends_bytes_sent ==>
Query_Cache_Entries ==>当前存储在查询缓存中的条目数。
Query_Cache_Memory_bytes ==>查询缓存的内存使用情况。
Query_Cache_Purged ==>由于TTL过期而被查询缓存清除的条目数。
Query_Cache_bytes_IN ==>发送到查询缓存的字节数。
Query_Cache_bytes_OUT ==>从查询缓存中读取的字节数。
Query_Cache_count_GET ==>读取请求的数量。
Query_Cache_count_GET_OK ==>读取成功的请求数量。
Query_Cache_count_SET ==>写请求数。
Query_Processor_time_nsec ==>查询处理器内部花费的时间,用于确定查询需要采取的操作(内部模块)。
Questions ==>执行的客户端请求/语句的总数。
SQLite3_memory_bytes ==>SQLite使用的内存。
Server_Connections_aborted ==>后端连接失败(或未正确关闭)的次数。
Server_Connections_connected ==>当前处于连接状态的后端连接数。
Server_Connections_created ==>创建的后端连接总数。
Server_Connections_delayed ==>
Servers_table_version ==>
Slow_queries ==>执行时间的毫秒数大于'mysql-long_query_time'参数的查询总个数。
Stmt_Cached ==>proxysql具有元数据的全局预准备(prepared)语句的数量。
Stmt_Client_Active_Total ==>客户端使用的预准备(prepared)语句总数。
Stmt_Client_Active_Unique ==>此变量跟踪客户端当前使用的唯一预准备(prepared)语句的数量
Stmt_Max_Stmt_id ==>当创建新的全局预准备(prepared)语句时,将使用新的'stmt_id'。Stmt_Max_Stmt_id表示有史以来使用的最大'stmt_id'。当删除预准备语句的元数据时,可以重用'stmt_id'。
Stmt_Server_Active_Total ==>所有后端连接中当前可用的预准备(prepared)语句总数。
Stmt_Server_Active_Unique ==>所有后端连接中当前可用的唯一预准备(prepared)语句的数量。
generated_error_packets ==>
max_connect_timeouts ==>
mysql_backend_buffers_bytes ==>如果使用fast_forward,则记录与后端连接相关的缓冲区(0表示不使用fast_forward)
mysql_frontend_buffers_bytes ==>与前端连接相关的缓冲区(读/写缓冲区和其他队列)
mysql_killed_backend_connections ==>
mysql_killed_backend_queries ==>
mysql_session_internal_bytes ==>ProxySQL用来处理MySQL Sessions的额外内存
mysql_unexpected_frontend_com_quit ==>
mysql_unexpected_frontend_packets ==>

9、stats_mysql_gtid_executed

表stats_mysql_gtid_executed提供了与一致读取的GTID跟踪相关的统计信息。该表显示了GTID集和每个后端节点上执行的事件数。

Admin>show create table stats.stats_mysql_gtid_executed\G
*************************** 1. row ***************************
       table: stats_mysql_gtid_executed
Create Table: CREATE TABLE stats_mysql_gtid_executed (
    hostname VARCHAR NOT NULL,
    port INT NOT NULL DEFAULT 3306,
    gtid_executed VARCHAR,
    events INT NOT NULL)
1 row in set (0.00 sec)

例如,在这里我们可以看到master(mysql1)和slave(mysql2,mysql3)之间GTID集的区别:

Admin> select * from stats_mysql_gtid_executed where hostname='mysql1’ \G ;
*************************** 1. row ***************************
     hostname: mysql1
         port: 3306
gtid_executed: 85c17137-4258-11e8-8090-0242ac130002:1-65588
       events: 65581

# After a few moments...

Admin> select hostname,gtid_executed from stats_mysql_gtid_executed order by hostname \G ;
*************************** 1. row ***************************
     hostname: mysql1
gtid_executed: 85c17137-4258-11e8-8090-0242ac130002:1-146301
*************************** 2. row ***************************
     hostname: mysql2
gtid_executed: 85c17137-4258-11e8-8090-0242ac130002:1-146300,8a093f5f-4258-11e8-8037-0242ac130004:1-5
*************************** 3. row ***************************
     hostname: mysql3
gtid_executed: 85c17137-4258-11e8-8090-0242ac130002:1-146301,8a0ac961-4258-11e8-8003-0242ac130003:1-5

10、stats_mysql_prepared_statements_info

由于多路复用的使用会出现如下请,客户端可能在后端连接中准备一个PS(prepared statements),但是当同一客户端想要执行PS时,该连接不是空闲的。
此外,多个客户端可能准备相同的PS。

ProxySQL使用以下的方式来解决了这两个问题:
1)对于每个唯一的PS,生成全局stmt_id,并将其元数据存储在内部的全局高速缓存中。
2)准备PS的每个客户端都获得一个stmt_id,该stmt_id是该客户端的本地编号,但会映射到全局stmt_id。
3)在准备PS的每个后端连接上,后端返回的stmt_id会被映射到全局stmt_id。

换句话说,全局stmt_id可以有多个与之关联的客户端stmt_id,以及与之关联的多个后端stmt_id。表stats_mysql_prepared_statements_info显示与PS关联的一些元数据(global_stmt_id, schemaname, username, digest and query),以及客户端连接(ref_count_client)和后端连接(ref_count_server)的引用计数器数。

Admin>SHOW CREATE TABLE stats.stats_mysql_prepared_statements_info\G
*************************** 1. row ***************************
       table: stats_mysql_prepared_statements_info
Create Table: CREATE TABLE stats_mysql_prepared_statements_info (
    global_stmt_id INT NOT NULL, hostgroup INT NOT NULL,
    schemaname VARCHAR NOT NULL,
    username VARCHAR NOT NULL,
    digest VARCHAR NOT NULL,
    ref_count_client INT NOT NULL,
    ref_count_server INT NOT NULL,
    query VARCHAR NOT NULL)
1 row in set (0.00 sec)

11、stats_mysql_processlist

以下是用于创建stats_mysql_processlist表的语句:

Admin>SHOW CREATE TABLE stats.stats_mysql_processlist\G
*************************** 1. row ***************************
       table: stats_mysql_processlist
Create Table: CREATE TABLE stats_mysql_processlist (
    ThreadID INT NOT NULL,
    SessionID INTEGER PRIMARY KEY,
    user VARCHAR,
    db VARCHAR,
    cli_host VARCHAR,
    cli_port INT,
    hostgroup INT,
    l_srv_host VARCHAR,
    l_srv_port INT,
    srv_host VARCHAR,
    srv_port INT,
    command VARCHAR,
    time_ms INT NOT NULL,
    info VARCHAR)
1 row in set (0.00 sec)

这些字段具有以下语义:
ThreadID ==>ProxySQL中线程的内部ID。这是一个从0开始的线程编号。
SessionID ==>ProxySQL会话或客户端连接(前端)的内部全局编号。能够唯一地识别这样的会话是有用的,例如为了能够杀死它或仅监视特定会话。
user ==>MySQL客户端连接到ProxySQL以执行此查询的用户。
db ==>当前选择的数据库。
cli_host ==>MySQL客户端连接ProxySQL的TCP连接的主机。
cli_port ==>MySQL客户端连接ProxySQL的TCP连接的端口。
hostgroup ==>当前的所在主机组。如果正在处理查询,则这是查询将被路由到或将被路由到的主机组,或者是默认主机组。默认情况下,路由是根MySQL客户端连接到ProxySQL的用户名所使用的默认目标主机组来完成的(基于mysql_users表,但也可以使用mysql_query_rules中的查询规则在每个查询的基础上修改它)
l_srv_host ==>ProxySQL通过TCP连接到当前主机组的后端MySQL服务器使用的本地主机地址。
l_srv_port ==>ProxySQL通过TCP连接到当前主机组的后端MySQL服务器使用的本地端口号。
srv_host ==>后端MySQL服务器正在侦听TCP连接的主机地址。
srv_port ==>后端MySQL服务器正在侦听TCP连接的端口。
command ==>正在执行的MySQL查询的类型(MySQL命令的关键字)。
time_ms ==>到目前为止查询已处于指定命令状态的时间(以毫秒为单位),即执行已花费的时间。
info ==>正在执行的实际查询。

请注意,这只是实际运行MySQL查询的快照。无法保证相同的查询将在几分之一秒后运行。
结果如下:

Admin>SELECT * FROM stats.stats_mysql_processlist ;
+----------+-----------+------+------+-----------+----------+-----------+------------+------------+-----------+----------+---------+---------+---------------------------------------+
| ThreadID | SessionID | user | db   | cli_host  | cli_port | hostgroup | l_srv_host | l_srv_port | srv_host  | srv_port | command | time_ms | info                                  |
+----------+-----------+------+------+-----------+----------+-----------+------------+------------+-----------+----------+---------+---------+---------------------------------------+
| 3        | 1         | root | test | 127.0.0.1 | 51831    | 0         | 127.0.0.1  | 55310      | 127.0.0.1 | 3306     | Query   | 0       | SELECT c FROM sbtest1 WHERE id=198898 |
| 0        | 2         | root | test | 127.0.0.1 | 51832    | 0         | 127.0.0.1  | 55309      | 127.0.0.1 | 3306     | Query   | 0       | SELECT c FROM sbtest3 WHERE id=182586 |
| 2        | 3         | root | test | 127.0.0.1 | 51833    | 0         | 127.0.0.1  | 55308      | 127.0.0.1 | 3306     | Query   | 0       | SELECT c FROM sbtest1 WHERE id=199230 |
| 1        | 4         | root | test | 127.0.0.1 | 51834    | 0         | 127.0.0.1  | 55307      | 127.0.0.1 | 3306     | Query   | 0       | SELECT c FROM sbtest2 WHERE id=201110 |
+----------+-----------+------+------+-----------+----------+-----------+------------+------------+-----------+----------+---------+---------+---------------------------------------+
4 rows in set (0.02 sec

注意:ProxySQL也支持命令SHOW PROCESSLIST和SHOW FULL PROCESSLIST以返回与当前会话相关的信息。

12、stats_mysql_query_digest and stats.stats_mysql_query_digest_reset

以下是用于创建stats_mysql_query_digest表的语句:

Admin>SHOW CREATE TABLE stats.stats_mysql_query_digest \G
*************************** 1. row ***************************
       table: stats_mysql_query_digest
Create Table: CREATE TABLE stats_mysql_query_digest (
    hostgroup INT,
    schemaname VARCHAR NOT NULL,
    username VARCHAR NOT NULL,
    client_address VARCHAR NOT NULL,
    digest VARCHAR NOT NULL,
    digest_text VARCHAR NOT NULL,
    count_star INTEGER NOT NULL,
    first_seen INTEGER NOT NULL,
    last_seen INTEGER NOT NULL,
    sum_time INTEGER NOT NULL,
    min_time INTEGER NOT NULL,
    max_time INTEGER NOT NULL,
    PRIMARY KEY(hostgroup, schemaname, username, client_address, digest))
1 row in set (0.00 sec)

每行代表一组查询,所有具有相同参数(但具有不同的值)的查询将会被使用相同的ProxySQL路由。
以下是典型结果的样子:

Admin>SELECT * FROM stats.stats_mysql_query_digest ORDER BY count_star DESC LIMIT 2;
+-----------+------------+----------+----------------+--------------------+----------------------------------+------------+------------+------------+------------+----------+----------+
| hostgroup | schemaname | username | client_address | digest             | digest_text                      | count_star | first_seen | last_seen  | sum_time   | min_time | max_time |
+-----------+------------+----------+----------------+--------------------+----------------------------------+------------+------------+------------+------------+----------+----------+
|    11     | test       | root     | 127.0.0.1      | 0x7721D69250CB40   | SELECT c FROM sbtest3 WHERE id=? | 8122800    | 1441091306 | 1441101551 | 7032352665 | 1010     | 117541   |
|    12     | test       | root     | 127.0.0.1      | 0x3BC2F7549D058B6F | SELECT c FROM sbtest4 WHERE id=? | 8100134    | 1441091306 | 1441101551 | 7002512958 | 101      | 102285   |
+-----------+------------+----------+----------------+--------------------+----------------------------------+------------+------------+------------+------------+----------+----------+

这些字段具有以下语义:
hostgroup ==>发出查询的主机组。值-1表示该查询命中了查询缓存。
schemaname ==>当前正在查询的数据库名称。
username ==>MySQL客户端连接到ProxySQL使用的用户名
client_address ==>MySQL客户端的地址。
digest ==>十六进制哈希值,其代表被剥离参数后的查询语句的唯一标识,类似绑定变量形式的SQL语句。
digest_text ==>被剥离参数后的查询语句的文本内容。
count_star ==>查询执行的总次数(通一SQL,但参数值不同)
first_seen ==>unix timestamp,查询语句第一次通过代理路由的时间点。
last_seen ==>unix timestamp,查询语句最近一次通过代理路由的时间点(到目前为止)。
sum_time ==>执行此类查询所花费的总时间(单位:微秒)。这对于确定应用程序在工作负载中花费时间最多的位置特别有用,并为从何处改进提供了良好的起点。
min_time ==>到目前为止最小执行时间,单位:微秒。可将此与执行此类查询时期望的时间范围进行对比,继而判断语句是否正常。
max_time ==>到目前为止最大执行时间,单位:微秒。可将此与执行此类查询时期望的时间范围进行对比,继而判断语句是否正常。

~
~
请注意,此表中的时间是指ProxySQL从客户端接收查询的时间点与ProxySQL准备将查询发送到客户端的时间点之间所经过的时间长度。
因此,这些计时器表示的时间长,更接近客户端执行查询所经过的真实时长。
更准确地说,它包括了诸如以下等情况所花费的时间:
1)在执行查询之前,ProxySQL可能需要更改字符集或模式所花费的时间;
2)如果当前的后端不可用,则找查找新的后端所花费的时间;
3)如果当前的查询失败,则在不同的后端运行查询所花费的时间;
4)由于当前所有连接都在使用中,而不得不等待连接变为空闲所花费的时间。

注意:仅当全局变量mysql-query_digests设置为true时,才会处理表stats_mysql_query_digest的统计信息。而mysql-query_digests为true是默认值,因为它还会被用于处理其他查询。建议不要禁用它。

stats_mysql_query_digest_reset表的内容和结构与上表的相同,但查询它也会自动将reset表内部统计信息重置为零。

13、stats_mysql_query_digest_reset

表stats_mysql_query_digest_reset与stats_mysql_query_digest相同,但从stats_mysql_query_digest_reset读取数据会导致该表中所有统计信息在SELECT结束时重置为零。

14、stats_mysql_query_rules

表stats_mysql_query_rules记录了查询规则被匹配、传输的次数。

以下是用于创建stats_mysql_query_rules表的语句:

Admin>SHOW CREATE TABLE stats.stats_mysql_query_rules \G
*************************** 1. row ***************************
       table: stats_mysql_query_rules
Create Table: CREATE TABLE stats_mysql_query_rules (
    rule_id INTEGER PRIMARY KEY,
    hits INT NOT NULL)
1 row in set (0.00 sec)

rule_id ==>规则的id,可以与main.mysql_query_rules表的rule_id字段进行关联。
hits ==>此规则的总命中次数。如果当前传入查询与规则匹配,则增加一次命中。每次处理与规则匹配的新查询时,命中数都会增加。

请注意,每次将查询规则加载到Runtime层时,都会重置hits;可通过显式的LOAD MYSQL QUERY RULES TO RUNTIME或通过ProxySQL Cluster进行隐式重新同步。

15、stats_mysql_users

表stats_mysql_users展现用户列表,包含它们当前的前端连接数以及它们可以创建的前端连接总数(如mysql_users.max_connections中所定义的)

Admin> SELECT username, frontend_connections conns, frontend_max_connections max_conns FROM stats_mysql_users WHERE frontend_connections > 0;
+----------------+-------+-----------+
| username       | conns | max_conns |
+----------------+-------+-----------+
| proxyab_rw_001 | 138   | 20000     |
| proxyab_ro     | 4     | 20000     |
| proxyab_rw     | 406   | 20000     |
| main_ro        | 4316  | 20000     |
| main_rw        | 800   | 20000     |
| test_rw        | 2     | 5000      |
| test_ro        | 1     | 5000      |
+----------------+-------+-----------+
7 rows in set (0.00 sec)

16、stats_proxysql_servers_checksums

作为群集中的一部分的ProxySQL实例会定期相互监视,以了解是否需要触发重新配置。
可以通过表stats_proxysql_servers_checksums来查询群集的当前信息:

Admin>SHOW CREATE TABLE stats.stats_proxysql_servers_checksums\G ;
*************************** 1. row ***************************
       table: stats_proxysql_servers_checksums
Create Table: CREATE TABLE stats_proxysql_servers_checksums (
    hostname VARCHAR NOT NULL,
    port INT NOT NULL DEFAULT 6032,
    name VARCHAR NOT NULL,
    version INT NOT NULL,
    epoch INT NOT NULL,
    checksum VARCHAR NOT NULL,
    changed_at INT NOT NULL,
    updated_at INT NOT NULL,
    diff_check INT NOT NULL,
    PRIMARY KEY (hostname, port, name) )
1 row in set (0.00 sec)

列代表的含义:
hostname ==>proxy的地址(远程或本地)
port ==>proxy的端口(远程或本地),默认6032。
name ==>正在同步的模块的名称
version ==>每次加载(本地)配置时,其版本号都会增加1
epoch ==>这是特定配置被创建的时间(本地或远程导入之前)
checksum ==>自己所用配置的校验和。这是代理用于检测配置是否被更改的信息。
changed_at ==>这是在本地加载特定配置的时间。请注意,它与epoch不同,后者表示创建配置的时间
updated_at ==>这是本地proxysql最近一次检查远程proxysql实例校验和的时间。如果此值未增加,则意味着本地proxysql无法从远程proxysql获取数据。
diff_check ==>检测到远程配置与本地配置不同时连续检查的次数。达到阈值时,会触发自动重新配置。

查看信息:

Admin> SELECT 'proxy'||SUBSTR(hostname,11,12) hostname,name,version v, epoch,SUBSTR(checksum,0,10)||'...' checksum, changed_at, updated_at, diff_check diff FROM stats_proxysql_servers_checksums WHERE version > 0 ORDER BY name, hostname;
+----------+-------------------+---+------------+--------------+------------+------------+------+
| hostname | name              | v | epoch      | checksum     | changed_at | updated_at | diff |
+----------+-------------------+---+------------+--------------+------------+------------+------+
| proxy01  | mysql_query_rules | 1 | 1543750277 | 0x8CE2200... | 1543750278 | 1543761243 | 0    |
| proxy02  | mysql_query_rules | 1 | 1542709023 | 0x8CE2200... | 1543750277 | 1543761244 | 0    |
| proxy03  | mysql_query_rules | 1 | 1542709056 | 0x8CE2200... | 1543750277 | 1543761244 | 0    |
| proxy01  | mysql_servers     | 2 | 1543754137 | 0xBB56542... | 1543754137 | 1543761243 | 0    |
| proxy02  | mysql_servers     | 7 | 1543754141 | 0xBB56542... | 1543754140 | 1543761244 | 0    |
| proxy03  | mysql_servers     | 6 | 1543754142 | 0xBB56542... | 1543754137 | 1543761244 | 0    |
| proxy01  | mysql_users       | 1 | 1543750277 | 0xA9533E6... | 1543750278 | 1543761243 | 0    |
| proxy02  | mysql_users       | 1 | 1542709023 | 0xA9533E6... | 1543750277 | 1543761244 | 0    |
| proxy03  | mysql_users       | 1 | 1542709056 | 0xA9533E6... | 1543750277 | 1543761244 | 0    |
| proxy01  | proxysql_servers  | 1 | 1543750277 | 0xA87C55F... | 1543750278 | 1543761243 | 0    |
| proxy02  | proxysql_servers  | 1 | 1542709023 | 0xA87C55F... | 1543750277 | 1543761244 | 0    |
| proxy03  | proxysql_servers  | 1 | 1542709056 | 0xA87C55F... | 1543750277 | 1543761244 | 0    |
+----------+-------------------+---+------------+--------------+------------+------------+------+
12 rows in set (0.00 sec)

17、stats_proxysql_servers_metrics

群集中的ProxySQL实例会定期交换全局状态。其中一些状态在stats_proxysql_servers_metrics中可见:

Admin>SHOW CREATE TABLE stats.stats_proxysql_servers_metrics \G;
*************************** 1. row ***************************
       table: stats_proxysql_servers_metrics
Create Table: CREATE TABLE stats_proxysql_servers_metrics (
    hostname VARCHAR NOT NULL,
    port INT NOT NULL DEFAULT 6032,
    weight INT CHECK (weight >= 0) NOT NULL DEFAULT 0,
    comment VARCHAR NOT NULL DEFAULT '',
    response_time_ms INT NOT NULL,
    Uptime_s INT NOT NULL,
    last_check_ms INT NOT NULL,
    Queries INT NOT NULL,
    Client_Connections_connected INT NOT NULL,
    Client_Connections_created INT NOT NULL,
    PRIMARY KEY (hostname, port) )
1 row in set (0.00 sec)

例如:

Admin> SELECT 'proxy'||SUBSTR(hostname,11,12) hostname , response_time_ms rtt_ms, Uptime_s, last_check_ms, Queries, Client_Connections_connected c_conn, Client_Connections_created c_created FROM stats_proxysql_servers_metrics ORDER BY hostname;
+----------+--------+----------+---------------+-----------+--------+-----------+
| hostname | rtt_ms | Uptime_s | last_check_ms | Queries   | c_conn | c_created |
+----------+--------+----------+---------------+-----------+--------+-----------+
| proxy01  | 0      | 12111    | 18494         | 52475036  | 9095   | 14445     |
| proxy02  | 0      | 1053365  | 18047         | 199072024 | 13552  | 456759    |
| proxy03  | 2      | 1053333  | 16950         | 248707015 | 9891   | 471200    |
+----------+--------+----------+---------------+-----------+--------+-----------+
3 rows in set (0.00 sec)

18、stats_proxysql_servers_status

创建此表是为了显示与proxysql_servers表中配置的所有服务相关的一般统计信息。===>当前未使用

Admin>SHOW CREATE TABLE stats.stats_proxysql_servers_status \G;
*************************** 1. row ***************************
       table: stats_proxysql_servers_status
Create Table: CREATE TABLE stats_proxysql_servers_status (
    hostname VARCHAR NOT NULL,
    port INT NOT NULL DEFAULT 6032,
    weight INT CHECK (weight >= 0) NOT NULL DEFAULT 0,
    master VARCHAR NOT NULL,
    global_version INT NOT NULL,
    check_age_us INT NOT NULL,
    ping_time_us INT NOT NULL, checks_OK INT NOT NULL,
    checks_ERR INT NOT NULL,
    PRIMARY KEY (hostname, port) )
1 row in set (0.00 sec)

~
~
完毕!

猜你喜欢

转载自blog.51cto.com/4709096/2490874