如何限制用户修改long_query_time
如何限制用户修改long_query_time
需求来源
数据库的 long_query_time 设置了写入慢查询日志的SQL语句执行时长的阈值,当应用系统修改为很小的值或0时,会在数据库的慢查询日志中记录大量SQL语句,导致数据库性能降低和占用磁盘空间的快速增长。
GreatSQL 对于影响整个数据库会话级变量设置为受限会话变量(如:binlog_format
,sql_log_bin和sql_log_off
),同时增加了用户权限 SESSION_VARIABLES_ADMIN
,只有授予了 SESSION_VARIABLES_ADMIN
的用户才能更改这些受限会话变量。
但 long_query_time 不在受限会话变量中,该如何限制应用程序修改 long_query_time 呢?
解决方法
在 performance_schema
中有表 variables_by_thread
存储了每个活动会话的会话级系统变量。可以编写一个event定时检查用户的long_query_time设置,如果与全局的long_query_time变量值不同,将该会话kill掉。
相关系统表:
#performance_schema下的系统表 #存储每个会话的会话级系统变量 greatsql> SHOW CREATE TABLE variables_by_thread\G *************************** 1. row *************************** Table: variables_by_thread Create Table: CREATE TABLE `variables_by_thread` ( `THREAD_ID` bigint unsigned NOT NULL, `VARIABLE_NAME` varchar(64) NOT NULL, `VARIABLE_VALUE` varchar(1024) DEFAULT NULL, PRIMARY KEY (`THREAD_ID`,`VARIABLE_NAME`) ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) #存储全局的系统变量 greatsql> SHOW CREATE TABLE global_variables\G *************************** 1. row *************************** Table: global_variables Create Table: CREATE TABLE `global_variables` ( `VARIABLE_NAME` varchar(64) NOT NULL, `VARIABLE_VALUE` varchar(1024) DEFAULT NULL, PRIMARY KEY (`VARIABLE_NAME`) ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
event程序的实现:
DELIMITER $$ CREATE EVENT check_session_long_query_time ON SCHEDULE EVERY 5 SECOND DO BEGIN DECLARE v_processlist_id BIGINT UNSIGNED; DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT t.PROCESSLIST_ID FROM performance_schema.variables_by_thread v inner join performance_schema.threads t on v.thread_id=t.thread_id WHERE v.VARIABLE_NAME = 'long_query_time' AND v.VARIABLE_VALUE != (select VARIABLE_VALUE from performance_schema.global_variables where VARIABLE_NAME = 'long_query_time' ) ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO v_processlist_id ; IF done THEN LEAVE read_loop; END IF; -- 终止连接 KILL v_processlist_id ; END LOOP; CLOSE cur; END$$ DELIMITER ;
总结
通过kill会话来限制用户修改会话级变量,有些暴力,但也是DBA的无奈手段。较好的方式是修改受限系统变量实现方法,将受限的会话变量做成一个可动态添加的列表,如在某个系统表中予以存储,DBA可以通过添加和删除数据行来动态修改受限会话变量。MySQL开源版本也存在同样的问题,MySQL 社区已确认作者提的feature request《Optimize the handling of SESSION_VARIABLES_ADMIN permission(https://bugs.mysql.com/bug.php?id=115944)》。
Enjoy GreatSQL :)
关于 GreatSQL
GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。
相关链接: GreatSQL社区 Gitee GitHub Bilibili
GreatSQL社区:
社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html
社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html
(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)
技术交流群:
微信&QQ群:
QQ群:533341697
微信群:添加GreatSQL社区助手(微信号:wanlidbc
)好友,待社区助手拉您进群。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
怎样在 10k 个 H100 GPU 上训练模型?
编者按: 怎样在 10,000 个 H100 GPU 上训练大模型?如何充分利用每一块 GPU 的算力?如何在这个复杂的 GPU 网络中高效传递数据?当不可避免的硬件故障发生时,又该如何快速恢复训练进度?我们今天为大家带来的文章中,作者为我们揭示了应对这些挑战的关键策略。 作者 | Soumith Chintala 编译 | 岳扬 我的好友 Francois Fleuret 提出了上述问题。我迅速总结了一些在大规模训练领域中相当普遍的知识,内容分为三部分。 首先,是如何将尽可能大的神经网络和 batch-size 适配到那 10000 张 H100s 上,这个步骤涉及到并行处理和使用节省内存的各种技巧。 其次,是如何在这些 GPU 之间尽可能高效地传递模型状态信息(state)。 最后,是如何在遇到硬件或软件故障时,尽可能迅速地恢复系统。 01 如何将尽可能大的神经网络和 batch-size 适配到那 10000 张 H100s 上 1.1 并行策略 在数据批次(batches)上进行并行处理(数据并行(data parallel)) 在神经网络层上进行并行处理(比如,将一层神经网络...
- 下一篇
美国大选尘埃落定,AI“猜”对了,你呢?
美国东部时间11月6日凌晨1点,随着阿拉斯加州的最后一个投票点关闭,美国大选选举日所有投票结束。美国共和党总统候选人特朗普在弗洛里达州西棕榈滩发表演讲,宣布在2024年总统选举中以277票赢得本次大选,正式重返白宫,成为美国第47任总统。随着大选的尘埃落定,我们不仅见证了政治舞台上的激烈角逐,还目睹了人工智能(AI)从预测选情到大选后的行业变革,在这场全民盛事中扮演的不可忽视的角色。 特朗普胜选演讲 美国大选中的AI预测 在这场选情胶着、竞争激烈的选举中,不仅美国民众,全世界都在关注谁将入主白宫。今年,除了传统民意调查和专家分析,AI技术也加入了预测的行列。 ●AI Agent帮助理解选民意向变化 在6月举行的纽约州联邦众议院选举初选中,中间派候选人乔治·拉蒂默以58.7%的得票率战胜了现任众议员贾马尔·鲍曼,后者获得了41.3%的选票。而在官方数据公布之前,AI公司Aaru已经进行了一次精准的民意预测,其预测结果与实际结果的误差仅为371票。与众不同的是,Aaru的预测并没有依赖传统的民意调查,而是通过分析人口普查数据来实现的。 据Aaru公司的联合创始人卡姆·芬克(Ca...
相关文章
文章评论
共有0条评论来说两句吧...