当前位置:网站首页>TiDB、mysql修改系统变量/常用语句(杀死process中的进程)
TiDB、mysql修改系统变量/常用语句(杀死process中的进程)
2022-06-21 08:21:00 【常名先生】
-- 查询所有全局变量
SHOW GLOBAL VARIABLES;
-- 查询所有会话变量
SHOW SESSION VARIABLES;
-- 指定查询全局变量
SELECT @@GLOBAL.tidb_retry_limit;
-- 指定查询会话变量
SELECT @@SESSION.tidb_retry_limit;
-- 优先查询会话变量,再查询全局变量
SELECT @@tidb_retry_limit;
-- 修改全局变量
SET GLOBAL
-- 修改会话变量
SET SESSION
问题一、(修改sql_mode)
注:同步数据时相关数据库的sql_mode一定要一致否则会出现问题
eg:
drop table if exists t;
create table t(a bigint, b bigint, c bigint);
insert into t values(1, 2, 1), (1, 2, 2), (1, 3, 1), (1, 3, 2);
select distinct a, b from t order by c;
报错:ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'b' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
在 MySQL 中,ORDER BY 表达式需至少满足以下条件之一,否则 DISTINCT 和 ORDER BY 查询将因不合规而被拒绝:
- 表达式等同于 SELECT 列表中的一个。
- 表达式引用并属于查询选择表的所有列都是 SELECT 列表的元素。
解决办法:
查看:
SELECT @@GLOBAL.sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改去掉ONLY_FULL_GROUP_BY
set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
问题二、(事务自动重试及带来的异常)
- 1、
tidb_disable_txn_auto_retry这个变量用来设置是否禁用显式事务自动重试,设置为 on 时,不会自动重试,如果遇到事务冲突需要在应用层重试。默认值:on/1;
如果将该变量的值设为 off/0,TiDB 将会自动重试事务,这样在事务提交时遇到的错误更少。需要注意的是,这样可能会导致数据更新丢失。
select @@GLOBAL.tidb_disable_txn_auto_retry;
-- SET GLOBAL tidb_disable_txn_auto_retry = 0;
- 2、
tidb_retry_limit这个变量用来设置最多可重试次数,即在一个事务执行中遇到可重试的错误(例如事务冲突、事务提交过慢或表结构变更)时,这个事务可以被重新执行,这个变量值表明最多可重试的次数。默认值=10
select @@GLOBAL.tidb_retry_limit;
SET GLOBAL tidb_retry_limit = 20
- 3、
tidb_backoff_weight事务重试时间。TiDB 向 PD 取 TSO 的基础超时时间,默认值:2;(TiDB 向 PD 取 TSO 的基础超时时间是 15 秒),当 tidb_backoff_weight = 2 时基础时间15 * 2 等于 30 秒。
select @@GLOBAL.tidb_backoff_weight;
-- SET GLOBAL tidb_backoff_weight = 1
问题三、(设置悲观锁tidb_txn_mode)
tidb_txn_mode
作用域:SESSION(自 TiDB 3.0.4 起支持 GLOBAL)
默认值:””
- 这个变量用于设置事务模式,默认是乐观锁模式。TiDB 3.0 加入了悲观锁模式(实验性)。将 tidb_txn_mode 设置为 ‘pessimistic’ 后,这个 session 执行的所有显式事务(即非 autocommit 的事务)都会进入悲观事务模式。
- 自 TiDB 3.0.4 起,该变量也支持 GLOBAL 作用域,用于设定全局的事务模式。当设定全局的事务模式时,仅在修改生效之后创建的 session 会受到影响。
SESSION作用当前修改的tidb-server
select @@GLOBAL.tidb_txn_mode
select @@SESSION.tidb_txn_mode
设置成悲观锁
set @@global.tidb_txn_mode = 'pessimistic';
-- SET SESSION tidb_txn_mode = ''
问题四、
INFORMATION_SCHEMA.SLOW_QUERY, 慢查询日志里的query语句太长,不能显示完整的 SQL语句
[[email protected] tidb-ansible]$ vim /home/tidb/tidb-ansible/conf/tidb.yml
......
log:
# Log level: debug, info, warn, error, fatal.
# level: "info"
# Log format, one of json, text, console.
# format: "text"
# Disable automatic timestamps in output
# disable-timestamp: false
# Queries with execution time greater than this value will be logged. (Milliseconds)
# slow-threshold: 300
# Queries with internal result greater than this value will be logged.
# expensive-threshold: 10000
# Maximum query length recorded in log.
# query-log-max-len: 2048
query-log-max-len: 20480
......
[[email protected] tidb-ansible]$
[[email protected] tidb-ansible]$
# 滚动更新以后,后续收集的语句就可以显示全部了
[[email protected] tidb-ansible]$ ansible-playbook rolling_update.yml
Congrats! All goes well. :-)
[[email protected] tidb-ansible]$
问题五、(开启大事务)
1、tidb_batch_insert(开启insert大事务)
作用域:SESSION
默认值:0
这个变量用来设置是否自动切分插入数据。仅在 autocommit 开启时有效。 当插入大量数据时,可以将其设置为 1,这样插入数据会被自动切分为多个 batch,每个 batch 使用一个单独的事务进行插入。 该用法破坏了事务的原子性和隔离性,使用该特性时,使用者需要保证没有其他对正在处理的表的任何操作,并且在出现报错时,需要及时人工介入,检查数据的一致性和完整性。因此,不建议在生产环境中使用。
select @@SESSION.tidb_batch_insert
SET SESSION tidb_batch_insert = '1'
2、tidb_batch_delete(开启delete大事务)
作用域:SESSION
默认值:0
这个变量用来设置是否自动切分待删除的数据。仅在 autocommit 开启,并且是单表删除的 SQL 时有效。关于单表删除的 SQL 的定义,详见 DELETE Syntax。 当删除大量数据时,可以将其设置为 1,这样待删除数据会被自动切分为多个 batch,每个 batch 使用一个单独的事务进行删除。 该用法破坏了事务的原子性和隔离性,使用该特性时,使用者需要保证没有其他对正在处理的表的任何操作,并且在出现报错时,需要及时人工介入,检查数据的一致性和完整性。因此,不建议在生产环境中使用。
配置整条 SQL 的内存使用阈值
官方参数参考
官方书籍位置
修改一个尽量所有有关tidb_mem_*都改变下
SELECT @@tidb_mem_quota_query
设置为1G
set @@tidb_mem_quota_query=1073741824
语句最长执行时间,单位为毫秒。默认值 (0) 表示无限制。
select @@GLOBAL.max_execution_time;
tidb4.0
更改配置文件的时候参考对应版本的配置参数
tiup cluster display test-cluster
tiup cluster edit-config test-cluster
tiup cluster reload test-cluster -N 172.168.192.33:4000
1、TiDB 单个事务允许的最大语句条数限制。
stmt-count-limit
TiDB 单个事务允许的最大语句条数限制。
默认值:5000
在一个事务中,超过 stmt-count-limit 条语句后还没有 rollback 或者 commit,TiDB 将会返回statement count 5001 exceeds the transaction limitation, autocommit = false错误。该限制只在可重试的**乐观事务**中生效,如果使用悲观事务或者关闭了事务重试,事务中的语句数将不受此限制。
解决方式参考问题2、3
2、调整TiDB 单个事务大小限制
报错:Transaction is too large, size: 104857600;
可以调整如下参数
- txn-total-size-limit
TiDB 单个事务大小限制
默认值:104857600 (Byte)/100M
单个事务中,所有 key-value 记录的总大小不能超过该限制。该配置项的最大值不超过 10737418240(表示 10GB)。注意,如果使用了以 Kafka 为下游消费者的 binlog,如:arbiter 集群,该配置项的值不能超过 1073741824(表示 1GB),因为这是 Kafka 的处理单条消息的最大限制,超过该限制 Kafka 将会报错。
3、 单个事务持锁的最长时间max-txn-ttl
报错:TTL manager has timed out, pessimistic locks may expire, please commit or rollback this transaction
- max-txn-ttl
单个事务持锁的最长时间,超过该时间,该事务的锁可能会被其他事务清除,导致该事务无法成功提交。
默认值:600000
单位:毫秒
超过此时间的事务只能执行提交或者回滚,提交不一定能够成功。
Join 算子优化
- tidb_distsql_scan_concurrency
作用域:SESSION | GLOBAL
默认值:15
这个变量用来设置 scan 操作的并发度。
AP 类应用适合较大的值,TP 类应用适合较小的值。对于 AP 类应用,最大值建议不要超过所有 TiKV 节点的 CPU 核数。
--设置GLOBAL作用域
mysql> set @@global.tidb_distsql_scan_concurrency=30;
- tidb_index_lookup_size
作用域:SESSION | GLOBAL
默认值:20000
含义:该变量用来设置 index lookup 操作的 batch 大小,AP 类应用适合较大的值,TP 类应用适合较小的值,SQL设置具体示例如下:
--设置GLOBAL作用域
mysql> set @@global.tidb_index_lookup_size=40000;
- tidb_index_lookup_concurrency
作用域:SESSION | GLOBAL
默认值:4
含义:该变量用来设置 index lookup 操作的并发度,AP 类应用适合较大的值,TP 类应用适合较小的值,SQL设置具体示例如下
--设置GLOBAL作用域
mysql> set @@global.tidb_index_lookup_concurrency=8;
- tidb_index_lookup_join_concurrency
作用域:SESSION | GLOBAL
默认值:4
含义:该变量用来设置 index lookup join 算法的并发度,SQL设置具体示例如下:
mysql> set @@global.tidb_index_lookup_join_concurrency=8;
- tidb_hash_join_concurrency
作用域:SESSION | GLOBAL
默认值:5
含义:该变量用来设置 hash join 算法的并发度,SQL设置具体示例如下:
mysql> set @@global.tidb_hash_join_concurrency=10;
- tidb_index_serial_scan_concurrency
作用域:SESSION | GLOBAL
默认值:1
含义:该变量用来设置顺序 scan 操作的并发度,AP 类应用适合较大的值,TP 类应用适合较小的值,SQL设置具体示例如下:
mysql> set @@global.tidb_index_serial_scan_concurrency=4;
杀死process中的进程
例子
mysql> SHOW PROCESSLIST;
+------+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+------+---------+------+-------+------------------+
| 1 | root | 127.0.0.1 | test | Query | 0 | 2 | SHOW PROCESSLIST |
| 2 | root | 127.0.0.1 | | Sleep | 4 | 2 | |
+------+------+-----------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
mysql> KILL TIDB 2;
Query OK, 0 rows affected (0.00 sec)
根据设计,该语句默认情况下与MySQL不兼容。这有助于防止在错误的TiDB服务器上终止连接的情况,因为通常将多个TiDB服务器放置在负载均衡器后面。
mysql使用方法
KILL [CONNECTION | QUERY] thread_id
TiDB 中窗口函数的使用方法与 MySQL 8.0 基本一致,详情可参见 MySQL 窗口函数。由于窗口函数会使用一些保留关键字,可能导致原先可以正常执行的 SQL 语句在升级 TiDB 后无法被解析语法,此时可以将 tidb_enable_window_function 设置为 0,该参数的默认值为 1。
边栏推荐
- Ads Filter Design Wizard tool 2
- Global and Chinese market of filter microplate reader 2022-2028: Research Report on technology, participants, trends, market size and share
- 2022-2028 global internal gear motor industry research and trend analysis report
- Global and Chinese market for crankshaft position sensors 2022-2028: Research Report on technology, participants, trends, market size and share
- 4.4 Eval function replaces function
- 给两个字符串s和t,判断t是否为s的重新排列后组成的单词
- Send using queue mailbox
- Classic topics of leetcode array (I)
- 群晖DSM7添加套件源
- 5 minutes to understand MySQL - row to column
猜你喜欢

How can we make millions a year now?

antd table长表格如何出现滚动条

Introduction to testing - Software Test Model

Blue Bridge Cup: Candy

Journal (résumé en langue c)
![[actual combat] ACM players illustrate leetcode using stack to realize queue](/img/f7/0a21f2fdc7c18f352c1b134d27c21c.jpg)
[actual combat] ACM players illustrate leetcode using stack to realize queue

Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)

Scientific research information | national natural conclusion regulations: more than 50% of the fund balance or it will not be concluded

Tsinghua University | van: visual attention network

GQL+Nodejs+MySQL数据库
随机推荐
MMS for risc-v
Redis master-slave vulnerability and remote connection vulnerability
Global and Chinese market for diamond blades 2022-2028: Research Report on technology, participants, trends, market size and share
[kotlin] first day
Antd table how scroll bars appear in long tables
4.5 dataset usage document
Kotlin middle tail recursive function
php exec、 system 、shell_ Exec cannot be executed. There is no result. The result is nulld. Solution
Global and Chinese market of Toro from 2022 to 2028: Research Report on technology, participants, trends, market size and share
How to build a deep learning framework?
Summary of command execution knowledge points in CTF
Decrypt FTP
/home/ljx/miniconda3/compiler_compat/ld: cannot find crtbeginS.o: 没有那个文件或目录
Can you implement these requirements with MySQL
[redis]-[redis underlying data structure] - Dictionary
Unity开发相关的博客收集
2022-2028 global boom cylinder industry research and trend analysis report
5分钟搞懂MySQL - 行转列
4.9 commander. js
Redis cache use case