客户端修改全局参数失败
场景描述
客户端修改全局参数,报错“ERROR 1227 (42000): Access denied”。
原因分析
GaussDB(for MySQL)不支持在数据库中执行修改全局参数的命令,需要通过管理控制台修改。
解决方案
登录管理控制台修改参数。
步骤 1 登录管理控制台。
步骤 2 单击管理控制台右上角的,选择Region。
步骤 3 在页面左上角单击,选择“数据库 > 云数据库 GaussDB(for MySQL)”。
步骤 4 在“实例管理”页面,选择指定的实例,单击实例名称,进入实例的基本信息页面。
步骤 5 在左侧导航栏中选择“参数修改”,在“参数”页签查看并修改对应参数。
客户端超时参数设置导致连接超时退出
场景描述
使用数据库时,经常遇到连接退出,导致后续语句执行失败的情况。
原因分析
在使用连接器或API连接数据库时,客户端会有一些默认的参数配置。其中有一些比较重要的参数如socketTimeout、connectTimeout等,会影响客户端连接的超时时间。如果超过这个时间,一直没使用的连接就会断开。
解决方案
-
将socketTimeout、connectTimeout等参数的默认值调整为合适的值。
-
在程序中注意处理断线重连的功能。
-
推荐直接使用连接池 。
修改全局变量成功但未生效
场景描述
使用Console上的参数修改功能修改long_query_time成功,但未生效。
原因分析
使用Console修改参数时,系统实际使用“set global 变量名=新的变量值;”修改全局参数。
在使用set global命令修改全局变量值时需要注意,该参数在当前连接和已经连接上数据库的其他连接中是不生效的,只对新连接生效,所以此时将所有连接断开重连,即可看到变量修改生效。
示例
举例中使用的是命令的方式做描述。
- 创建会话1。
# 查看参数值。
show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.08 sec)
# 修改变量值
set global long_query_time=1;
Query OK, 0 rows affected (0.02 sec)
# 重新查看,发现未生效。
show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
- 创建会话2。
show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
- 在会话1中执行。
show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.01 sec)
- 会话2断开,重新连接,发现修改生效。
show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.01 sec)
GaussDB(for MySQL) timeout相关参数简介
MySQL中有多种timeout参数,GaussDB(for MySQL)也将相关参数提供给用户设置,如下表:
表 参数说明
参数名称 | 修改是否需要重启 | 参数含义 |
---|---|---|
connect_timeout | 否 | GaussDB(for MySQL)服务器在回Bad handshake响应之前等待连接数据包的时间(秒)。 |
innodb_flush_log_at_timeout | 否 | 每N秒写入并刷新日志。当innodb_flush_log_at_trx_commit值为2时,此设置有效。 |
innodb_lock_wait_timeout | 否 | 该变量控制innodb事务获取行锁等待的最长时间,如果超过该时间还未获取到锁资源,则会返回执行失败 |
parallel_queue_timeout | 否 | 请求并行执行的查询的等待时间。如果超过该等待时间后,系统中并行执行的线程数仍然大于parallel_max_threads,则不再等待而进入单线程执行。 |
lock_wait_timeout | 否 | 试图获得元数据锁的超时时间(秒)。 |
net_read_timeout | 否 | 中止读数据之前从一个连接等待更多数据的秒数。 |
net_write_timeout | 否 | 中止写之前等待一个块被写入连接的秒数。 |
interactive_timeout | 否 | 服务器在关闭交互式连接之前等待活动的秒数。 |
wait_timeout | 否 | 服务器关闭连接之前等待非交互式连接活动的秒数。 |