感兴趣

ProxySQL手册_03全局变量

2021-10-12  本文已影响0人  这货不是王马勺

转载来自 骏马金龙 https://www.junmajinlong.com

全局变量概述

ProxySQL的行为可以通过全局变量来调整。有两种配置方式:

要修改全局变量的值,使用UPDATE语句:

UPDATE global_variables SET variable_value=1900 WHERE variable_name='admin-refresh_interval';

或者使用类似于MySQL的更短的SET语句(常用此种方式):

SET admin-refresh_interval = 1700;
SET admin-version = '1.1.1beta8';

(译者注:要查看变量的值,可以show variables [like xxx];或者show global variables;)
接下来,我们将详细地解释每个变量。

Admin变量

admin-admin_credentials

这是一个分号分隔的账户密码对user:password列表,这些是认证到admin接口具有读、写权限的用户凭据。对于只读权限的用户凭据,它们只能连接到admin接口并查询数据,见变量admin-stats_credentials。注意,admin接口通过ProxySQL的main线程监听在独立的端口上(译注:关于ProxySQL的线程类型,参见https://github.com/malongshuai/proxysql/wiki/ProxySQL-Threads)。这个端口是通过变量admin-mysql_ifaces控制的。

需要引起重视的是:

admin-mysql_ifaces

指定admin接口的监听地址,格式为分号分隔的hostname:port列表。注意,允许使用UNIX的domain socket进行监听,这样本主机内的应用程序就可以直接被处理。例如:SET admin-mysql_ifaces='127.0.0.1:6032;/tmp/proxysql_admin.sock'。


admin-mysql_ifaces

admin-read_only

当该变量设置为true并已加载到runtime生效后,Admin模块就不会再接受任意具有写权限的连接。不想让ProxySQL进行任何重新配置时,这很有用。当admin-read-only=true,唯一将其设置为false并在runtime(需要先让Admin模块再次可写)生效的方法是运行命令PROXYSQL READWRITE


admin-read_only

admin-refresh_interval

更新查询规则的统计数据、命令计数器的统计数据的刷新时间间隔(单位毫秒)。请注意,不要将这个变量的值调整的太小,因为这会影响ProxySQL的性能。也不要调整的太大,因为这会影响结果的正确性。


admin-refresh_interval

admin-stats_credentials

分号分隔的用户密码对user:password,该变量定义的用户凭据连接到admin接口时只有只读权限。它们不允许修改内部的数据接口,例如后端MySQL服务器节点列表(或主机组)、查询规则等。它们只允许从统计表(statistics tables)和监控表(monitoring table)中读取数据,其它表对它们不可见。
注意:admin-stats_credentials中的用户不能出现在mysql_users表中。


admin-stats_credentials

admin-telnet_admin_ifaces

当前未使用(计划在将来的版本中使用)。

admin-telnet_stats_ifaces

当前未使用(计划在将来的版本中使用)。

admin-version

ProxySQL的版本号,该变量是只读变量。


admin-version

历史统计数据管理

从ProxySQL 1.4.4开始,Admin模块将历史数据指标存储到datadir下的新数据库proxysql_stats.db中。表结构可能受未来变化的影响。

admin-stats_mysql_connection_pool

更新"连接池的历史统计数据"的时间间隔(单位秒)。


admin-stats_mysql_connection_pool

admin-stats_mysql_connections

更新"MySQL连接的历史统计数据"的时间间隔(单位秒),这里的连接同时包括和前端的、和后端的。


admin-stats_mysql_connections

admin-stats_mysql_query_cache

更新"MySQL查询缓存的历史统计数据"的时间间隔(单位秒)。


admin-stats_mysql_query_cache

admin-stats_system_cpu

更新"CPU使用率的历史统计信息"的时间间隔(单位秒)。


admin-stats_system_cpu

admin-stats_system_memory

更新"内存使用率的历史统计信息"的时间间隔(单位秒)。
注意:如果没有将jemalloc编译到ProxySQL,则无法获取这些内存统计数据。官方给出的包中都会将jemalloc编译到ProxySQL。


admin-stats_system_memory

Admin模块的web接口

ProxySQL 1.4.4嵌入了一个HTTP web server,可以用来收集一些特定的指标。
访问web接口的用户由admin-stats_credentials决定。

admin-web_enabled

如果admin-web_enabled设置为true,则自动启用内嵌的web server。


admin-web_enabled

admin-web_port

定义web server的监听接口。


admin-web_port

MySQL变量

mysql-client_found_rows

设置为true时,为了让ProxySQL连接到后端MySQL,会设置一个CLIENT_FOUND_ROWS的客户端标识。
没明白具体含义,不过一般不改此变量。


mysql-client_found_rows

mysql-commands_stats

启用每个命令的MySQL查询统计信息。所谓的命令,是正在执行的SQL查询的一种类型。例如:SELECT、INSERT或ALTER TABLE。


mysql-commands_stats

mysql-connect_retries_delay

连接到后端MySQL服务器时失败后,需要等待多长时间才尝试重连(单位毫秒)。有多种可能会导致和后端MySQL的连接失败:太繁忙、当前尝试超时等。重连次数由mysql-connect_retries_on_failure决定。


mysql-connect_retries_delay

mysql-connect_retries_on_failure

当和后端MySQL服务器的连接失败时(可能是发生错误、超时或其它事件导致的),允许的重连次数。当耗尽了重连次数且仍然没有成功建立连接,将报错。例如,返回一个通用的错误("Max connect failure while reaching hostgroup" with error code 28000)。
调整该变量时需要小心,太大的值会显著增加主机组(因为无法建立连接,它们已经无响应)给MySQL客户端回应的延迟时长。


mysql-connect_retries_on_failure

mysql-connect_timeout_server

ProxySQL连接到后端MySQL服务器的超时时间,这个是单次连接的超时时间。如果这次连接超时,根据其它参数的设置,ProxySQL将会重新尝试建立连接,直到达到了最大重连次数而每秒生成报错信息(此时ProxySQL会自动避开后端MySQL,即不再连接,但会不断报错),或者达到了连接的最终截止时间(见mysql-connect_timeout_server_max)而报另一种错误。


mysql-connect_timeout_server

mysql-connect_timeout_server_max

ProxySQL和后端MySQL服务器建立连接的超时时间。当达到了这个超时时长后,将返回给客户端 #28000的错误代码("Max connect failure while reaching hostgroup" with error code 28000)。
(译注:这个是所有重连的总超时时长。例如单次超时时间为1秒,允许重连次数为20次,但这里的超时时间为10秒,那么大概第10次重连时就会直接报错,因为到了连接的截止时间)
See also mysql-shun_recovery_time_sec

mysql-connect_timeout_server_max

mysql-connection_delay_multiplex_ms

短期内禁用连接上的多路复用功能,这使得前端的连接会重用后端的连接以便成功完成查询(例如执行批处理查询)。这个延迟时间(毫秒)是在连接出于空闲状态(当前没有任何会话使用)时评估计算的。


mysql-connection_delay_multiplex_ms

mysql-connection_max_age_ms

当该变量设置的值大于0时(单位毫秒),如果某个空闲连接(当前没有任何会话使用)的空闲时长超过了这里设置的值,则这个连接会关闭。默认情况下,连接不会基于它们的存活时长而关闭。
(译注:换句话说,即长连接的空闲状态保持时长。默认无上限)


mysql-connection_max_age_ms

mysql-default_charset

返回给MySQL客户端时,ProxySQL默认使用的字符集。注意,这是和客户端的默认通信字符集,不是和后端MySQL服务器通信的字符集。


mysql-default_charset

mysql-default_max_latency_ms

ProxySQL使用一种自动忽略的机制来忽略那些延迟过大的后端主机。注意,只是忽略该后端服务器,而不是禁用:换句话说,ProxySQL更喜欢低延迟的后端主机。可以在每个后端主机的mysql_servers表的max_latency_ms列来配置它的最大延迟时长。如果该后端主机的mysql_servers.max_latency_ms的值为0,则采用此处变量的值作为默认值。


mysql-default_max_latency_ms

注意:考虑到ProxySQL对SSL实现的局限性,建议在使用SSL时增大此处的值。

mysql-default_query_delay

一个简单的对后端MySQL节点的限流机制。如果此变量设置为N(非0值,单位毫秒),将延迟N毫秒再执行所有的查询,这是全局性的延迟。在admin表mysql_query_rules中有更细粒度限流机制,它可以为每个能匹配规则的查询设置独立的延迟时长。这个额外的细粒度延迟是在此处默认的全局延迟之上添加的(译注:也就是说会覆盖全局的延迟)。


mysql-default_query_delay

mysql-default_query_timeout

指定路由到后端MySQL的查询最长持续时间,如果超过了这个时间,表示查询执行太慢,ProxySQL会探测到这个超时,然后派生出一个独立的线程发送KILL查询语句到后端MySQL上,以便杀掉后端执行该查询的线程来停止查询。由于后端的查询线程被杀,所以ProxySQL会向客户端返回一个错误。


mysql-default_query_timeout

mysql-default_reconnect

当前未使用。

mysql-default_schema

指定一个默认的schema,当客户端发起的查询语句中没有指定schema名称时,ProxySQL将重写语句并加上该默认schema。
(译注:如果不理解schema,将其看作是数据库即可。其实在MySQL中,schema就是数据库的同义词。例如,这里使用了默认的schema,就无需先use databaseA,再select ...)


mysql-default_schema

mysql-default_sql_mode

当客户端想要修改sql_mode时,ProxySQL需要跟踪这次修改以确保该客户端涉及到的所有后端的sql_mode都完全一致。
当ProxySQL和后端建立一个新的连接,ProxySQL不会知道后端节点上的sql_mode值。尽管它可以查询后端的sql_mode得到结果,但每次查询会有延迟开销。基于此,ProxySQL不会去查询后端的sql_mode值,而是假设所有后端都使用此处变量mysql-default_sql_mode指定的值。
如果客户端要修改的sql_mode值和此变量的值不同,则ProxySQL需要确保和该客户端有关的每个后端的sql_mode值都完全一致。换句话说,,如果客户端设置sql_mode的值和此变量的值相同,那么ProxySQL不会修改后端MySQL上的sql_mode,因为它认为这个sql_mode是正确的。
该变量如果配置错误,将会导致一些预料之外的结果。例如,如果mysql-default_sql_mode=''(ProxySQL的默认值,也是MySQL <=5.6.5的默认值),而后端的sql_mode值不是'',当客户端执行set session sql_mode=''时,ProxySQL将不会在任何后端上做任何修改。
应该让此变量的值和所有后端的sql_mode的值相同。如果后端的sql_mode和此处值不同,或者你想让ProxySQL总是强制客户端指定的sql_mode值,那么该变量可以随意配一个值。但这样会让ProxySQL每次都去修改后端的sql_mode为客户端指定的值。


mysql-default_sql_mode

mysql-enforce_autocommit_on_reads

ProxySQL跟踪客户端指定的autocommit,并确保所连接的后端上已经正确设置autocommit。如果客户端使用autocommit启动事务,并通过查询规则实现读/写分离,则此将出现问题。实际上,如果读取请求被发送给一个slave,且ProxySQL为slave设置了autocommit=0,将会导致两个事务(一个在master上,一个在slave上)。为了防止这种情况发生,如果mysql-enforce_autocommit_on_reads=false(默认值),ProxySQL将不会更改SELECT语句所连接的后端的autocommit的值。

mysql-eventslog_filename

如果设置了该变量,ProxySQL将会记录所有的事件到指定的文件中。注意,这个日志文件是二进制编码格式的,不是文本文件。文件名可以是绝对路径(例如"/data/events_log/events_log"),也可以是一个单独的文件名(例如"events_log"),此时会记录到数据目录下。ProxySQL总会为文件名加上一个序列号后缀(例如"events_log.00000001")。


mysql-eventslog_filename

mysql-eventslog_filesize

该变量指定mysql-eventslog_filename文件(由ProxySQL logger创建)的最大容量值。当达到了该最大值时,将rotated到新的日志文件。


mysql-eventslog_filesize

mysql-free_connections_pct

ProxySQL有一个连接池,用于连接后端MySQL服务器。
在不需要连接到后端时,不会预先分配连接,因此在ProxySQL刚启动的时候,没有任何到后端的连接。
当应用程序发送了一个MySQL请求(译注:即需要和后端通信)给ProxySQL时,ProxySQL首先解析要路由到哪个后端,如果连接池中已经有和该后端的连接,将重用该连接,否则将创建一个新的和后端的连接。
当处理完客户端的请求后,连接会还回主机组管理器(HostGroup Manager)。如果主机组管理器判断了该连接是可以被安全共享的,且连接池未满,则该连接会放进连接池。
(译注:连接池中的连接全都是空闲连接,正在使用的连接不会进入连接池)
但是,不是所有的未使用的连接都会放进连接池。该变量用来控制某后端的空闲连接和最大总连接数的百分比。对于每个hostgroup/backend,主机组管理器只会保持连接池中的最大连接数为mysql-free_connections_pct * mysql_servers.max_connections / 100。池中的每个空闲连接都通过间断性的ping来维持它的打开状态。
如果某连接从上一次ping之后,如果还没有被使用,则该连接被定义为空闲连接。对于空闲连接ping的时间间隔由变量mysql-ping_interval_server_msec控制。


mysql-free_connections_pct

mysql-have_compress

已不再使用该变量。

mysql-interfaces

指定MySQL请求的监听地址和端口hostname:port(译注:是客户端向ProxySQL发起的关于MySQL操作的请求,可将其理解为MySQL的3306端口的作用),多个监听地址可使用分号分隔。注意,也可以使用UNIX domain socket来处理本机应用程序发出的MySQL请求。


mysql-interfaces

mysql-max_allowed_packet

mysql-max_allowed_packet定义客户端接收的单个最大数据包大小。它模仿自mysqld的max_allowed_packet
(译注:换句话说,是ProxySQL发送给客户端的单个最大数据包大小。请查看上述MySQL的官方手册,以下是简要说明:
对于要返回的大对象,如大blob对象、长文本,必须将该变量设置为比该对象更大或者相等,否则将会报错。如果允许的话,还要修改客户端程序接收的最大包大小。只能按照1024的倍数进行修改。 )

mysql-max_allowed_packet

mysql-max_connections

ProxySQL能处理的和前端客户端的最大连接数。如果还有新的连接请求,这些请求将会被拒绝,并返回错误代码#HY000和错误信息Too many connections。


mysql-max_connections

mysql-max_stmts_per_connection

当一个连接放回连接池(译注:表示进入空闲状态了)时,会计算这个连接之后还能处理多少个语句,当处理的语句数量达到该阈值后,将关闭该连接(v1.4.3之前)或者重置该连接(从v1.4.4开始)。


mysql-max_stmts_per_connection

mysql-max_transaction_time

当正在执行事务的会话达到了该超时时长后,ProxySQL就会将这个会话杀掉。
(译注:因为这表示事务执行太慢,可能是因为这是个长事务,也可能是因为后端处理速度太慢。所以杀掉后会返回错误信息给客户端)


mysql-max_transaction_time

mysql-monitor_connect_interval

ProxySQL的Monitor模块会尝试连接到后端MySQL以便检查它们是否健康,该变量定义建立连接的时间间隔。(译注:换句话说,即对后端做健康检查的时间间隔)


mysql-monitor_connect_interval

mysql-monitor_connect_timeout

Monitor模块和后端建立连接时的超时时间(单位毫秒)。目前,这个时间会向下舍入为小于或等于此处给定值转换为秒的整数(译注:给定2200毫秒,会转换为2秒)。允许的最小值为1秒。这种懒惰的"四舍五入"行为是因为SSL连接是阻塞模型的调用。


mysql-monitor_connect_timeout

mysql-monitor_enabled

启用/禁用Monitor模块,该模块用于监控后端MySQL服务器的健康。


mysql-monitor_enabled

mysql-monitor_history

Monitor模块生成因为做检查而生成的事件的持续时长。这些事件包括:连接到后端(检查和后端是否能通信),发起一个简单的ping查询(检查后端MySQL服务是否正常运行),以及检查后端MySQL复制是否有拖后腿的节点(replication lag)。这些事件都会记录日志,日志表分别为:

mysql-monitor_username

指定Monitor模块连接到后端时使用的用户名。这些用户只需要有USAGE权限能进行连接、ping以及只读检查(译注:read_only check,指的是slave必须只允许read_only,不允许写)即可。如果需要监控replication lag,则还需要具有REPLICATION CLIENT权限。


mysql-monitor_username

mysql-monitor_password

指定Monitor模块连接到后端时使用的密码。


mysql-monitor_password

mysql-monitor_ping_interval

Monitor模块使用[mysql_ping]API向后端发起ping的时间间隔。
(参考https://dev.mysql.com/doc/refman/5.0/en/mysql-ping.html)

mysql-monitor_ping_interval

mysql-monitor_ping_timeout

Monitor模块等待ping回复的超时时间。超过这段时间还未收到后端对ping的回复,就认为和该后端的无法建立正常的连接。


mysql-monitor_ping_timeout

mysql-monitor_read_only_max_timeout_count

当monitor线程执行read_only检查,且该检查的时间超出了mysql-monitor_read_only_timeout(译注:在官方wiki中没有给出这个变量的解释。它的作用是单次read_only检查的超时时间)后,将重试read_only检查直到该变量指定的最大次数。如果达到了最大次数,read_only检查还是未通过,则将该slave标记为OFFLINE HARD。


mysql-monitor_read_only_max_timeout_count

mysql-monitor_query_interval

目前未使用该变量。
以后Monitor模块将会收集后端服务器的全局状态数据,该变量指定收集的时间间隔。


mysql-monitor_query_interval

mysql-monitor_query_status

目前未使用该变量。
以后Monitor模块将会收集后端服务器的全局状态数据。


mysql-monitor_query_status

mysql-monitor_query_timeout

目前未使用该变量。
以后Monitor模块将会收集后端服务器的全局状态数据,该变量指定收集状态数据时的超时时间。


mysql-monitor_query_timeout

mysql-monitor_query_variables

目前未使用该变量。
以后Monitor模块将会收集后端服务器的全局状态数据。


mysql-monitor_query_variables

mysql-monitor_replication_lag_interval

ProxySQL需要每隔一段时间去检查后端的复制是否有哪个slave比master上的数据延迟很大(译注:俗称拖后腿,例如某slave的复制速度较慢),该变量指定做replication lag检查的时间间隔。如果ProxySQL发现某slave拖后腿了,会临时将其标记为"自动避开节点"。由admin接口的mysql_servers.max_replication_lag字段的值决定每隔主机组中的slave节点是否拖后腿(译注:即slave比Master延迟了多少数据)。


mysql-monitor_replication_lag_interval

mysql-monitor_replication_lag_timeout

Monitor模块等待后端MySQL返回SHOW SLAVE STATUS结果,该变量指定等待的超时时长。


mysql-monitor_replication_lag_timeout

mysql-monitor_slave_lag_when_null

当replication检查返回Seconds_Behind_Master=NULL时,mysql-monitor_slave_lag_when_null的值(单位秒)就作为当前replication lag的延迟长度。这使得ProxySQL对于不正常的后端节点,即可以避开它也可以保持它在线。
(译注:
在MySQL 5.7,second_behind_master=null表示两种可能:(1)SQL线程未运行;(2)或者SQL线程已将relay log重放完成,但IO线程未运行。
在MySQL 5.7之前,返回null表示SQL线程未运行,或IO线程未运行,或未连接到master。 总之,返回null时,表示该slave暂时处于不可用状态。ProxySQL根据mysql-monitor_slave_lag_when_null来决定最多允许多长时间不可用,超过了这段时间,就认为它真的不可用,需要避开它。
)


mysql-monitor_slave_lag_when_null

mysql-monitor_timer_cached

此变量控制ProxySQL是否使用wall clock time的缓存值(精度较低)。(API详见http://stuff.onse.fi/man?program=event_base_gettimeofday_cached&section=3).
此项目前还没弄明白,待后续研究。

mysql-monitor_timer_cached

mysql-ping_interval_server_msec

ProxySQL为了维持和后端的空闲连接,每隔一段时间发送一次ping,该变量指定发起ping的时间间隔。


mysql-ping_interval_server_msec

mysql-ping_timeout_server

ProxySQL为了维持和后端的空闲连接,每隔一段时间发送一次ping。保持空闲连接,可以避免和该后端新建连接,从而降低开销、减少ProxySQL的内存占用以及其它一些流量。该变量指定ping得到回复的超时时间。


mysql-ping_timeout_server

mysql-poll_timeout

ProxySQL使用系统调用poll()探测流入/流出流量的最小超时时间。如果ProxySQL确定了它应该使用一个更大的超时时间(比如需要内部计算时),它将会自动增加超时时间,但绝不会使用低于这个变量的超时时长。


mysql-poll_timeout

mysql-poll_timeout_on_failure

在连接失败后,用来探测流入/流出流量的超时时间。在某些情况下(译注:如再次发起连接),代理会自动将其超时调整为一个较低的值,以便能够快速响应有效的连接。


mysql-poll_timeout_on_failure

mysql-query_digests

当该变量设置为true,ProxySQL将分析接收到的查询语句,并且并将它们划分到参数相同但值不同的查询类别中。它会为这些查询类别计算一些指标,这些全都可以从status_mysql_query_digest表中查看到。更详细的内容,请参见https://github.com/malongshuai/proxysql/wiki/Main-(runtime)#mysql_query_rules
需要引起注意的是,当需要禁用多路复用时,需要使用查询的数字摘要(digest)来决定何时禁用多路复用,例如TEMPORARY表,SQL_CALC_FOUND_ROWSGET_LOCK等。(原文:It is also very important to note that query digest is required to determine when multiplexing needs to be disabled, for example in case of TEMPORARY tables, SQL_CALC_FOUND_ROWS , GET_LOCK, etc. )
除非你明确知道禁用mysql-query_digests不会中断你的应用程序,否则任何时候都不要禁用该变量。

mysql-query_digests

mysql-query_digests_lowercase

当设置为true时,查询摘要会自动转换为小写,如果为false,则查询摘要区分大小写。


mysql-query_digests_lowercase

mysql-query_digests_max_digest_length

定义digest_text的最大长度,并报告到stats_mysql_query_digest中。


mysql-query_digests_max_digest_length

mysql-query_digests_max_query_length

当计算查询摘要(query's digest)以及摘要文本(digest_text)时能处理的最大查询长度。


mysql-query_digests_max_query_length

mysql-query_processor_iterations

如果设置了mysql_query_rules.flagOUT且mysql-query_processor_iterations值大于0,则正在匹配的规则将设置flagIN,并从开头开始处理规则直到mysql-query_processor_iterations。因此,mysql-query_processor_iterations允许跳回到之前的mysql_query_rules处。
(原文: If mysql_query_rules.flagOUT is set and mysql-query_processor_iterations is greater than 0, a matching rule will set flagIN and starts processing rules from the beginning up to mysql-query_processor_iterations iterations.
Therefore, mysql-query_processor_iterations allows to jump back to previous mysql_query_rules.)


mysql-query_processor_iterations

mysql-query_processor_regex

该变量定义使用何种正则表达式引擎:

mysql-query_retries_on_failure

当某查询失败后,将重试查询的次数。


mysql-query_retries_on_failure

mysql-server_capabilities

MySQL功能的位掩码(编码为位),ProxySQL将用它来响应连接到它的客户端。这能有效防止使用某些特定功能,尽管计划在将来弃用它。
默认的功能有:

server_capabilities = CLIENT_FOUND_ROWS | CLIENT_PROTOCOL_41 | CLIENT_IGNORE_SIGPIPE | CLIENT_TRANSACTIONS | CLIENT_SECURE_CONNECTION | CLIENT_CONNECT_WITH_DB | CLIENT_SSL;

详细的MySQL功能见官方手册.

mysql-server_capabilities

mysql-server_version

ProxySQL响应给客户端的MySQL版本号。
注意,即使后端MySQL的版本号和此处定义的不一样,ProxySQL也会无视后端实际的版本号,而是返回此处定义的版本号。


mysql-server_version

mysql-servers_stats

当前已不再使用,将来版本中会移除此变量。


mysql-servers_stats

mysql-session_debug

当前已不再使用,将来版本中会移除此变量。


mysql-session_debug

mysql-session_idle_ms

从v1.3.0开始,每个MySQL线程都有一个伴随的空闲线程(auxiliary thread),负责处理空闲会话。该变量定义了session何时进入空闲状态,进入空闲状态后,该会话(译注:此处也表示和客户端的连接)会被MySQL线程交给伴随它的空闲线程来维持,当该连接发生了某些事件(例如,新的连接、超时等)后,空闲线程会将会话还给MySQL线程。


mysql-session_idle_ms

mysql-session_idle_show_processlist

该变量定义了空闲session(由mysql-session_idle_ms定义)是否应当被show processlist列出(更通用的,是否应该记录到stats_mysql_processlist表中)。出于性能的考虑,默认不会列出空闲会话。


mysql-session_idle_show_processlist

mysql-sessions_sort

所谓会话(session)是ProxySQL中维持的MySQL客户端和后端MySQL服务器之间的对话。session通常按照持续平衡的顺序进行处理,但在某些场景中(比如使用事务时,这会使session绑定到池中的某些MySQL连接),以相同的顺序处理它们会导致线程饥饿(译注:某些线程已经处理完了请求,却还在等在它之前的线程)。
此变量用来控制session是否应该按照等待时间的顺序进行处理,以便在会话之间实现更均衡的流量分配。


mysql-sessions_sort

mysql-shun_on_failures

以1秒的间隔允许和后端MySQL的错误连接数量,直到该后端被临时标记为自动避开的节点。目前不能通过将它设置为一个特殊值来禁用它,可以将它设置为一个非常大的值来变相禁用它。
(译注:第一次连接失败后,每秒重连1次,并输出错误信息,如果一直连接失败,在一定次数(即此变量指定的值)后,ProxySQL将标记该后端为自动避开的节点,在被标记为自动避开的时间段内,ProxySQL就当这个后端是不存在的。在一定时间后会取消该标记,避开的时间长短由变量mysql-shun_recovery_time_sec控制。)


mysql-shun_on_failures

mysql-shun_recovery_time_sec

当某后端服务器被ProxySQL自动避开(译注:ProxySQL将某节点标记为自动避开后,ProxySQL将忽略这些后端节点)后,需要等待这里定义的时间才会恢复,恢复之后ProxySQL才不会忽略它。
注意,如果ProxySQL并未正在处理MySQL流量,则无法保证精确的恢复时间,但在实践过程中,不会超过这个值太长时间(只差几秒种)。
会进行的自我调整:

mysql-stacksize

ProxySQL用于处理MySQL流量和连接到后端的后台线程所使用的栈空间大小。无法在runtime下使该变量的修改生效,如果需要生效,必须通过重启ProxySQL的方式实现。


mysql-stacksize

mysql-stats_time_backend_query

启用/禁用"后端查询使用的CPU时间统计信息"的收集。
Enables / disables collection of backend query CPU time statistics.


mysql-stats_time_backend_query

mysql-stats_time_query_processor

启用/禁用"查询处理器使用的CPU时间统计信息"的收集。


mysql-stats_time_query_processor

mysql-threads

ProxySQL用于处理MySQL流量的后台线程数。注意,还有其它类型的线程,它们不是处理和MySQL流量有关的线程,例如:

mysql-threshold_query_length

如果发送给ProxySQL的SQL查询语句太长,将会标记和后端已建立的MySQL连接为"不可重用(non-reusable)"。这会强制让ProxySQL打开一个新的和后端服务器的连接,以便限制服务器的内存使用率在合理范围内。
详细内容见MySQL官方手册:https://dev.mysql.com/doc/refman/5.6/en/memory-use.html 。以下是和此处配额相关的说明:"连接buffer(connection buffer)和结果集buffer(result buffer)的初始大小都等于net_buffer_length,但在有需求时会动态地扩容到max_allowed_packet大小。在查询语句结束后,结果集buffer的大小会收缩回net_buffer_length。"

mysql-threshold_query_length

mysql-threshold_resultset_size

如果后端服务器返回的结果集长度大于这个阈值,ProxySQL将立即开始将结果发送给发起请求的客户端,以便限制其内存占用。
默认值:4194304(字节,即4MB)


mysql-threshold_resultset_size

mysql-wait_timeout

如果一个会话(MySQL客户端和ProxySQL之间的对话)的空闲时长超过此阈值,ProxySQL将杀掉该会话。


mysql-wait_timeout
上一篇下一篇

猜你喜欢

热点阅读