元器件网站开发客户,做海报找素材的网站,四川住房和建设厅网站,wordpress 随机点击数1 SQL PATCH 熟悉 Oracle 的DBA都知道#xff0c;生产系统出现性能问题时#xff0c;往往是SQL走错了执行计划#xff0c;紧急情况下#xff0c;无法及时修改应用代码#xff0c;DBA可以采用多种方式针对于某类SQL进行执行计划绑定#xff0c;比如SQL Profile、SPM、SQL … 1 SQL PATCH 熟悉 Oracle 的DBA都知道生产系统出现性能问题时往往是SQL走错了执行计划紧急情况下无法及时修改应用代码DBA可以采用多种方式针对于某类SQL进行执行计划绑定比如SQL Profile、SPM、SQL Plan Base等等。 MogDB 数据库5.0版本引入了SQL PATCH的特性SQL PATCH能够在避免直接修改用户业务语句的前提下对查询执行的方式做一定调整。在发现查询语句的执行计划、执行方式未达预期的场景下可以通过创建查询补丁的方式使用Hint对查询计划进行调优或对特定的语句进行报错短路处理。 SQL PATCH主要设计给DBA、运维人员及其他需要对SQL进行调优的角色使用用户通过其他运维视图或定位手段识别到业务语句存在计划不优导致的性能问题时可以通过创建SQL PATCH对业务语句进行基于Hint的调优。目前支持行数、扫描方式、连接方式、连接顺序、PBE custom/generic计划选择、语句级参数设置、参数化路径的Hint。 特性约束 仅支持针对Unique SQL ID打PATCH如果存在Unique SQL ID冲突用于Hint调优的SQL PATCH可能影响性能但不影响语义正确性。仅支持不改变SQL语义的Hint作为PATCH不支持SQL改写。不支持逻辑备份、恢复。不支持创建时校验PATCH合法性如果PATCH的Hint存在语法或语义错误不影响查询正确执行。仅初始用户、运维管理员、监控管理员、系统管理员用户有权限执行库之间不共享创建SQL PATCH时需要连接目标库。配置集中式备机可读时需要指定主机执行SQL PATCH创建/修改/删除函数调用备机执行报错。SQL PATCH同步给备机存在一定延迟待备机回放相关日志后PATCH生效。不支持对存储过程中的SQL语句生效当前机制不会对存储过程内语句生成Unique SQL ID。用于规避的Abort Patch不建议在数据库中长期使用只应该作为临时规避方法遇到内核问题所导致的特定语句触发数据库服务不可用问题需要尽快修改业务或升级内核版本解决问题并且升级后由于Unique SQL ID生成方法可能变化可能导致规避方法失效。当前除DML语句之外其他SQL语句如CREATE TABLE等的Unique SQL ID是对语句文本直接哈希生成的所以对于此类语句SQL PATCH对大小写、空格、换行等敏感即不同的文本的语句即使语义相对仍然需要对应不同的SQL PATCH对于DML则同一个SQL PATCH可以对不同入参的语句生效并且忽略大小写和空格。 依赖关系 需要开启enable_resource_track参数并且设置instr_unique_sql_count大于0。对于不同的语句如果生成的Unique SQL ID冲突会导致SQL PATCH错误地命中预期外的其他语句。其中用于调优的Hint PATCH副作用相对较小Abort Patch需要谨慎使用。 2 实际案例 1、创建表 创建表t1和t2 create table t1(name char(10),id int);
create table t2(name char(10),id int); 2、构造数据 INSERT INTO t1 (name, id)
SELECT data_|| generate_series(1, 1000), generate_series(1, 1000);INSERT INTO t2 (name, id)
SELECT data_|| generate_series(1, 1000), generate_series(1, 1000);CREATE INDEX idx_t1 ON t1 (id);
CREATE INDEX idx_t2 ON t2 (id); 3、获取unique_query_id 执行SQL并获取unique_query_id、执行计划 set track_stmt_stat_level L1,L1; --track_stmt_stat_level解释
该参数分为两部分
--形式为full sql stat level, slow sql stat level。
--级别L2 L1 L0L1在L0的基础上记录了执行计划L2在L1的基础上记录了锁的详细信息select * from t1 a, t2 b where a.id b.id;name | id | name | id
------------------------------------data_1 | 1 | data_1 | 1data_2 | 2 | data_2 | 2data_3 | 3 | data_3 | 3data_4 | 4 | data_4 | 4data_5 | 5 | data_5 | 5data_6 | 6 | data_6 | 6data_7 | 7 | data_7 | 7。。。。
(1000 row) 4、获取查看执行计划 走的全表扫描hash jion执行计划 explain select * from t1 a, t2 b where a.id b.id;QUERY PLAN
--------------------------------------------------------------------------Aggregate (cost60.75..60.76 rows1 width8)- Hash Join (cost28.50..58.25 rows1000 width0)Hash Cond: (a.id b.id)- Seq Scan on t1 a (cost0.00..16.00 rows1000 width4)- Hash (cost16.00..16.00 rows1000 width4)- Seq Scan on t2 b (cost0.00..16.00 rows1000 width4) 5、查询unique_query_id select unique_query_id,query,start_time from dbe_perf.statement_history where query like %from t1 a%;unique_query_id | query | start_time
----------------------------------------------------------------------------------------------------3366573496 | select * from t1 a, t2 b where a.id b.id; | 2024-01-19 10:08:56.99439108也可以通过statement_history查询执行计划
select start_time,query_plan from dbe_perf.statement_history where unique_query_id 3366573496;start_time | query_plan
---------------------------------------------------------------------------------------------------------2024-01-19 10:08:56.99439108 | Datanode Name: dn_6001_6002 | Hash Join (cost28.50..58.25 rows1000 width30) | Hash Cond: (a.id b.id) | - Seq Scan on t1 a (cost0.00..16.00 rows1000 width15) | - Hash (cost16.00..16.00 rows1000 width15) | - Seq Scan on t2 b (cost0.00..16.00 rows1000 width15)| 6、SQL PATCH绑定执行计划 call dbe_sql_util.create_hint_sql_patch(enmo patch,3366573496,indexscan(a));create_hint_sql_patch
-----------------------t
(1 row)--参数说明
enmo patch --SQL PATCH name
3366573496 --unique_query_id
indexscan(a) --Hint文本 7、验证SQL PATCH 执行并检查新的执行计划是否生效 select * from t1 a, t2 b where a.id b.id;name | id | name | id
------------------------------------data_1 | 1 | data_1 | 1data_2 | 2 | data_2 | 2data_3 | 3 | data_3 | 3data_4 | 4 | data_4 | 4data_5 | 5 | data_5 | 5data_6 | 6 | data_6 | 6data_7 | 7 | data_7 | 7。。。。explain select * from t1 a, t2 b where a.id b.id;
NOTICE: Plan influenced by SQL hint patchQUERY PLAN
------------------------------------------------------------------------------Hash Join (cost28.50..86.50 rows1000 width30)Hash Cond: (a.id b.id)- Index Scan using idx_t1 on t1 a (cost0.00..44.25 rows1000 width15) --这里走了索引表示SQL patch生效- Hash (cost16.00..16.00 rows1000 width15)- Seq Scan on t2 b (cost0.00..16.00 rows1000 width15)
(5 rows) 查看statement_history的执行计划 select query_plan,to_char(start_time,yyyymmdd-hh24:mi:ss) starttime
from dbe_perf.statement_history
where unique_query_id 3366573496
order by start_time;Datanode Name: dn_6001_6002 | 20240119-10:09:54Hash Join (cost28.50..86.50 rows1000 width30) | Hash Cond: (a.id b.id) | - Index Scan using idx_t1 on t1 a (cost0.00..44.25 rows1000 width15)| - Hash (cost16.00..16.00 rows1000 width15) | - Seq Scan on t2 b (cost0.00..16.00 rows1000 width15) | | | 查看数据库内已定义的SQL Patch select patch_name,unique_sql_id,enable,hint_string from gs_sql_patch;patch_name | unique_sql_id | enable | hint_string
-------------------------------------------------enmo patch | 3366573496 | t | indexscan(a)show_sql_patch查看SQL PATCH内容
MogDB# select DBE_SQL_UTIL.show_sql_patch(enmo patch);show_sql_patch
-------------------------------------(3366573496,t,f,indexscan(a))
(1 row) 8、Abort Patch 使用Abort PATCH对特定语句进行提前报错规避 MogDB# select * from dbe_sql_util.drop_sql_patch(enmo patch); -- 删去enmo patchdrop_sql_patch
----------------t
(1 row)
MogDB# select * from dbe_sql_util.create_abort_sql_patch(patch2, 3366573496); -- 对该语句的Unique SQL ID创建Abort Patchcreate_abort_sql_patch
------------------------t
(1 row)MogDB# select * from t1 a, t2 b where a.id b.id; -- 再次执行语句会提前报错
ERROR: Statement 3366573496 canceled by abort patch patch2 9、关闭特定SQL Patch disable enmo patch
call dbe_sql_util.disable_sql_patch(enmo patch); 执行SQL并检查执行计划是否恢复原始状态 MogDB# select query_plan,to_char(start_time,yyyymmdd-hh24:mi:ss) starttime
MogDB-# from dbe_perf.statement_history
MogDB-# where unique_query_id 3366573496
MogDB-# order by start_time;query_plan | starttime
---------------------------------------------------------------------------------------------Datanode Name: dn_6001_6002 | 20240119-13:24:52Nested Loop (cost0.00..340.00 rows1000 width30) | - Seq Scan on t1 a (cost0.00..16.00 rows1000 width15) | - Index Scan using idx_t2 on t2 b (cost0.00..0.31 rows1 width15)| Index Cond: (id a.id) | | | Datanode Name: dn_6001_6002 | 20240119-13:31:49Hash Join (cost28.50..58.25 rows1000 width30) | Hash Cond: (a.id b.id) | - Seq Scan on t1 a (cost0.00..16.00 rows1000 width15) | - Hash (cost16.00..16.00 rows1000 width15) | - Seq Scan on t2 b (cost0.00..16.00 rows1000 width15) | | 最新的执行计划已经还原成hash jion。 MogDB 数据库官方文档参考 SQL PATCH特性描述https://docs.mogdb.io/zh/mogdb/v5.0/sql-patch#特性描述track_stmt_stat_levelhttps://docs.mogdb.io/zh/mogdb/v5.0/query#track_stmt_stat_level 关于作者 许玉晨云和恩墨 MogDB 技术支持工程师有12年左右的金融、保险、政府、地税、运营商等业务关键型系统的运维经验曾担任公司异常恢复东区接口人负责紧急异常恢复工作目前负责国产化MogDB数据库的推广工作。 数据驱动成就未来云和恩墨不负所托 云和恩墨创立于2011年以“数据驱动成就未来”为使命是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人构建数据驱动的智能未来。 云和恩墨在数据承载分布式存储、数据持续保护、管理数据库基础软件、数据库云管平台、数据技术服务、加工应用开发质量管控、数据模型管控、数字化转型咨询和应用数据服务化管理平台、数据智能分析处理、隐私计算等领域为各个组织提供可信赖的产品、服务和解决方案围绕用户需求持续为客户创造价值激发数据潜能为成就未来敏捷高效的数字世界而不懈努力。
文章转载自: http://www.morning.cnkrd.cn.gov.cn.cnkrd.cn http://www.morning.kdgcx.cn.gov.cn.kdgcx.cn http://www.morning.byshd.cn.gov.cn.byshd.cn http://www.morning.nwgkk.cn.gov.cn.nwgkk.cn http://www.morning.zstbc.cn.gov.cn.zstbc.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.clhyj.cn.gov.cn.clhyj.cn http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.mmosan.com.gov.cn.mmosan.com http://www.morning.tscsd.cn.gov.cn.tscsd.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.skksz.cn.gov.cn.skksz.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.tzmjc.cn.gov.cn.tzmjc.cn http://www.morning.fchkc.cn.gov.cn.fchkc.cn http://www.morning.qggxt.cn.gov.cn.qggxt.cn http://www.morning.zcwzl.cn.gov.cn.zcwzl.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.fmqng.cn.gov.cn.fmqng.cn http://www.morning.cgtrz.cn.gov.cn.cgtrz.cn http://www.morning.rlkgc.cn.gov.cn.rlkgc.cn http://www.morning.bkryb.cn.gov.cn.bkryb.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.zwwhq.cn.gov.cn.zwwhq.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.nzsx.cn.gov.cn.nzsx.cn http://www.morning.qkqzm.cn.gov.cn.qkqzm.cn http://www.morning.rxhs.cn.gov.cn.rxhs.cn http://www.morning.flmxl.cn.gov.cn.flmxl.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.qngcq.cn.gov.cn.qngcq.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.rpgdd.cn.gov.cn.rpgdd.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.kcwkt.cn.gov.cn.kcwkt.cn http://www.morning.rdng.cn.gov.cn.rdng.cn http://www.morning.fphbz.cn.gov.cn.fphbz.cn http://www.morning.jhrqn.cn.gov.cn.jhrqn.cn http://www.morning.tfwg.cn.gov.cn.tfwg.cn http://www.morning.lflnb.cn.gov.cn.lflnb.cn http://www.morning.kmlmf.cn.gov.cn.kmlmf.cn http://www.morning.jcwt.cn.gov.cn.jcwt.cn http://www.morning.pjbhk.cn.gov.cn.pjbhk.cn http://www.morning.mntxalcb.com.gov.cn.mntxalcb.com http://www.morning.lsmnn.cn.gov.cn.lsmnn.cn http://www.morning.wqfj.cn.gov.cn.wqfj.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.kqhlm.cn.gov.cn.kqhlm.cn http://www.morning.wnmdt.cn.gov.cn.wnmdt.cn http://www.morning.rtbj.cn.gov.cn.rtbj.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn http://www.morning.mslhq.cn.gov.cn.mslhq.cn http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn http://www.morning.fhykt.cn.gov.cn.fhykt.cn http://www.morning.gynls.cn.gov.cn.gynls.cn http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.lmxrt.cn.gov.cn.lmxrt.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn http://www.morning.gnbfj.cn.gov.cn.gnbfj.cn http://www.morning.huihuangwh.cn.gov.cn.huihuangwh.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn http://www.morning.nkpls.cn.gov.cn.nkpls.cn http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.kmcby.cn.gov.cn.kmcby.cn http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com http://www.morning.ysbhj.cn.gov.cn.ysbhj.cn