sql server express 并发数的限制_阿里数据库性能诊断的利器——SQL执行干预

本文介绍了阿里数据库AliSQL和OceanBase如何处理性能差的问题SQL。AliSQL提供SQL执行计划干预和限流功能,通过修改执行计划或限制SQL并发数来解决紧急情况。OceanBase则支持SQL Outlines,允许修改在线SQL执行计划并进行限流控制,确保SQL性能稳定。
摘要由CSDN通过智能技术生成

概述

在业务数据库性能问题诊断中,如果发现一个业务性能很差跟某个SQL有关,应用连接池几乎被该SQL占满,同时数据库服务器上也不堪重负。此时情况很紧急,业务改SQL重发布已经来不及了,运维能选择的操作不多。如批量重启应用、数据库切换或者重启。此时业务中断一下,很可能很快压力又上来,问题依然在那个SQL。前篇文章《阿里数据库性能诊断的利器——SQL全量日志》分享了如何定位问题SQL,本文就分享阿里数据库们如何处理这个问题SQL。

ORACLE在SQL性能诊断方面的功能非常丰富,一直被其他数据库模仿。其中Outline和SQL Profile功能就非常有用。当业务SQL在生产环境执行计划走错后(如表连接顺序或算法不对,或者索引选择的不对等等),此时可以在该问题SQL上使用hint先生成一个正确的执行计划,然后用Outlines存储这个执行计划,然后再跟执行计划缓存里在用的执行计划进行交换,从而让业务SQL回到正确的执行计划上,性能问题也就迎刃而解了。虽然这个过程有点复杂,也有很多注意事项,但终究是一个不错的选择。ORACLE在10g后将Outlines功能进一步改进推出SQL Profiles功能,更容易生成、更改和控制SQL执行计划。详情参考后面文章。

MySQL数据库在SQL性能优化方面能力一般,数据库性能又严重依赖主机IO和CPU能力。面对这个问题社区版的MySQL数据库只有选择切换或重启。

在互联网业务中,数据库请求数QPS非常高,当SQL有性能问题时,很快就会将数据库的某个资源(CPUIO)耗尽,进而拖慢其他正常的业务SQL。而应用服务器集群里每个APP的连接池也会相应被耗尽,从而可能出现应用相继挂掉,引起雪崩。阿里数据库AliSQL和OceanBase针对这个场景都有一个SQL干预手段,即SQL执行计划修改或者限流。

阿里数据库内核的SQL执行干预功能

AliSQL的SQL执行计划干预和SQL限流

AliSQL是阿里巴巴数据库内核团队曾经维护的一个开源MySQL的分支,针对MySQL内核做了很多加强和优化。其中一个独特的功能就是SQL执行计划干预和SQL限流。

AliSQL的SQL执行计划干预也是利用hint先生成正确的执行计划,然后再替换掉实际运行中的执行计划。能修改的也只是索引。并且其替换并不像ORACLE那样严格的使用SQL ID去替换,而是可以根据SQL特征去匹配替换。这个功能的关键字是sql_hints。其原理是在语法解析后,sql优化前,根据设定的规则,对语法解析树进行修改。模拟在语法解析中,解析到了index hint。

功能:可在Server端设定指定规则,为指定sql动态添加索引hint,以干预其执行计划。
语法:

Set
sql_hints=’+,<schema_name>,<table_name>,<index_name>,<keyword1>~<keyword2>~<keywordn>’;
Example:
Set
sql_hints=’+,test,t1,idx_id1,select id from~orderid=~status=’;

这个功能也有些限制就是只能针对单表select限制,特征指定(keyword)不能太简单,db名称不能模糊匹配。在电商MySQL场景完全够用了。

示例设置规则:

root@(none) 01:03:17>set global sql_hints='+,xxx_xxxxxx_0000,xxxxxx_template_refer_,idx_refer,select~from~where~`xxxxxx_template_refer`.`template_id` =~`xxxxxx_template_refer`.`user_id` =';

示例查看规则,可以看到规则命中多少次,失败多少次。

root@(none) 01:03:14>show sql_hints;
+---------+-----------------------+--------------------------+-----------+---------+---------+--------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| rule_id | db | table | index | key_num | hits | errors | cmd_str |
+---------+-----------------------+--------------------------+-----------+---------+---------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值