企业网站平台如何做网络推广,网站建设销售简历,能看男女做那个的网站,gta5买房网站建设中在诊断并行执行问题时#xff0c;我们可以从两个主要方面展开分析。首先#xff0c;从整体系统层面进行考量#xff0c;比如检查网络是否畅通、磁盘IO是否过载、CPU资源是否已用满#xff1b;其次#xff0c;针对具体的SQL语句进行深入剖析#xff0c;定位问题SQL#x…在诊断并行执行问题时我们可以从两个主要方面展开分析。首先从整体系统层面进行考量比如检查网络是否畅通、磁盘IO是否过载、CPU资源是否已用满其次针对具体的SQL语句进行深入剖析定位问题SQL并探究其内部状态。 并行执行系列的内容分为七篇博客本篇是其中的第六篇。
一并行执行概念二如何手动设置并行度三并行执行线程资源管理方式四并行执行的4种类别五并行执行参数的应用技巧 6.1 系统诊断
在业务比较繁忙的系统重出现性能问题时首先需要在系统层面做初步诊断。一般有两种途径
OCPOceanBase Cloud Platform支持可视化观测系统性能tsar 等命令行系统工具支持查询网络、磁盘、CPU等的历史监控数据
tsar 是一个系统监控和性能分析工具它可以提供关于 CPU、磁盘、网络等方面的详细信息。以下是 tsar 命令的几个常见用法
tsar --cpu
tsar --io
tsar --traffic
除了以上示例外tsar 还支持其他选项和参数例如通过参数-d 2 可以查出两天前到现在的数据-i 1 表示以每次1分钟作为采集显示。
tsar -n 2 -i 1 --cpu
如果出现磁盘或网络打爆则优先从硬件容量过小或并发压力过大角度解决问题。 6.2 SQL 诊断
当遇到并行执行问题时可以从 SQL 层面、并行执行线程层面、算子层面逐层检查。
6.2.1 确认 SQL 还在执行
确认 SQL 在正常执行关注 TIME 字段每次查询 GV$OB_PROCESSLIST 视图 TIME 字段都在增长并且 STATE 为 ACTIVE说明 Query 还在执行。
确认 SQL 是否在反复重试如果 SQL 是因为反复重试导致没有返回结果RETRY_CNT、RETRY_INFO 字段会有相关信息。其中 RETRY_CNT 是表示重试了多少次了RETRY_INFO 是最后一次重试的原因。没有重试发生的时候RETRY_CNT 为 0。TOTAL_TIME 字段表示包含每次重试在内的累计执行时间。如果发现 SQL 在反复重试则根据 RETRY_INFO 中给出的错误码判断是否需要干预。OBServer v4.1 之前最常见的一个错误是 -4138OB_SNAPSHOT_DISCARDED遇到这种情况按照本文中 《4 并行执行分类》中的 4.2.4 节指示调大 undo_retention 值即可解决。对于其它错误如 -4038OB_NOT_MASTER等无需任何处理一般可以自动重试成功。如果重试次数总是大于1并且确认系统整体状态平稳可以联系 OceanBase 研发做进一步判断。
-- MySQL 模式
SELECTTENANT,INFO,TRACE_ID,STATE,TIME,TOTAL_TIME,RETRY_CNT,RETRY_INFO
FROMoceanbase.GV$OB_PROCESSLIST;
如果发现 GV$OB_PROCESSLIST 里还有对应的 SQL但状态被标记为 SESSION_KILLED并且一直没有退出那么需要联系 OceanBase 研发报告 bug。这可能是因为
有逻辑没有正确检测 SESSION KILLED 状态未能及时退出执行流程 6.2.2 确认 SQL 还在执行并行查询
OBServer 集群中所有活跃的并行执行线程都可以通过 GV$OB_PX_WORKER_STAT视图查看到。
-- MySQL 模式
OceanBase(adminoceanbase)select * from oceanbase.GV$OB_PX_WORKER_STAT;
SESSION_ID: 3221520411TENANT_ID: 1002SVR_IP: 192.168.0.1SVR_PORT: 19510TRACE_ID: Y4C360B9E1F4D-0005F9A76E9E66B2-0-0QC_ID: 1SQC_ID: 0WORKER_ID: 0DFO_ID: 0
START_TIME: 2023-04-23 17:29:17.372461-- Oracle 模式
OceanBase(rootSYS)select * from SYS.GV$OB_PX_WORKER_STAT;
SESSION_ID: 3221520410TENANT_ID: 1004SVR_IP: 192.168.0.1SVR_PORT: 19510TRACE_ID: Y4C360B9E1F4D-0005F9A76E9E66B1-0-0QC_ID: 1SQC_ID: 0WORKER_ID: 0DFO_ID: 0
START_TIME: 2023-04-23 17:29:15.372461
结合从 GV$OB_PROCESSLIST 拿到的 TRACE_ID通过这个视图可以看到 SQL 当前正在执行哪些 DFO执行了多久等信息。
如果这个视图里什么也查不到但 GV$OB_PROCESSLIST 里依然可以看到相应 SQL可能的原因包括
所有 DFO 均已执行完成结果集较大当前正处在向客户端吐数据阶段除了最顶层 DFO 外其余所有 DFO 均已执行完成 6.2.3 确认每个算子的执行状况
通过 oceanbase.GV$SQL_PLAN_MONITOR (MySQL 或 SYS.GV$SQL_PLAN_MONITOROracle可以查看每个并行工作线程中每个算子的执行状态。从 OBServer v4.1 起GV$SQL_PLAN_MONITOR包含两部分数据
已经执行完成的算子。所谓执行完成是指这个算子已经调用过 close 接口在当前线程中不再处理任何数据。正在执行的算子。所谓正在执行是指这个算子还没有调用 close 接口正在处理数据过程中。读取这部分算子的数据需要在查询 GV$SQL_PLAN_MONITOR 视图的 where 条件中指定 request_id 0。在使用 request_id 0 条件查询本视图时我们也称为访问 “Realtime SQL PLAN MONITOR”。本访问接口未来可能会变化。
OBServer 4.1 之前仅支持查看已经执行完成的算子状态。
GV$SQL_PLAN_MONITOR中有几个重要的域
TRACE_ID它唯一标识了一条 SQLPLAN_LINE_ID算子在执行计划中的编号对应于通过 explain 语句查看到的编号PLAN_OPERATION算子名称如 TABLE SCAN、HASH JOINOUTPUT_ROWS当前算子已经输出的行数FIRST_CHANGE_TIME算子吐出首行数据时间LAST_CHANGE_TIME算子吐出最后一行数据时间FIRST_REFRESH_TIME算子开始监控时间LAST_REFRESH_TIME算子结束监控时间
根据上面几个域基本就能刻画出一个算子处理数据的主要动作了。举例几个场景
查看一个已经执行完成的 SQL每个算子使用了多少个线程来执行
SELECT PLAN_LINE_ID, PLAN_OPERATION, COUNT(*) THREADS
FROM GV$SQL_PLAN_MONITOR
WHERE TRACE_ID YA1E824573385-00053C8A6AB28111-0-0
GROUP BY PLAN_LINE_ID, PLAN_OPERATION
ORDER BY PLAN_LINE_ID;-----------------------------------------------
| PLAN_LINE_ID | PLAN_OPERATION | THREADS |
-----------------------------------------------
| 0 | PHY_PX_FIFO_COORD | 1 |
| 1 | PHY_PX_REDUCE_TRANSMIT | 2 |
| 2 | PHY_GRANULE_ITERATOR | 2 |
| 3 | PHY_TABLE_SCAN | 2 |
-----------------------------------------------
4 rows in set (0.104 sec)
查看正在执行的 SQL当前正在执行哪些算子使用了多少线程已经吐出了多少行
SELECT PLAN_LINE_ID, CONCAT(LPAD(, PLAN_DEPTH, ), PLAN_OPERATION) OPERATOR, COUNT(*) THREADS, SUM(OUTPUT_ROWS) ROWS
FROM GV$SQL_PLAN_MONITOR
WHERE TRACE_ID YA1E824573385-00053C8A6AB28111-0-0 AND REQUEST_ID 0
GROUP BY PLAN_LINE_ID, PLAN_OPERATION, PLAN_DEPTH
ORDER BY PLAN_LINE_ID;
查看一个已经执行完成的 SQL每个算子处理了多少行数据吐出了多少行数据
SELECT PLAN_LINE_ID, CONCAT(LPAD(, PLAN_DEPTH, ), PLAN_OPERATION) OPERATOR, SUM(OUTPUT_ROWS) ROWS
FROM GV$SQL_PLAN_MONITOR
WHERE TRACE_ID Y4C360B9E1F4D-0005F9A76E9E6193-0-0
GROUP BY PLAN_LINE_ID, PLAN_OPERATION, PLAN_DEPTH
ORDER BY PLAN_LINE_ID;
-------------------------------------------------------
| PLAN_LINE_ID | OPERATOR | ROWS |
-------------------------------------------------------
| 0 | PHY_PX_MERGE_SORT_COORD | 2 |
| 1 | PHY_PX_REDUCE_TRANSMIT | 2 |
| 2 | PHY_SORT | 2 |
| 3 | PHY_HASH_GROUP_BY | 2 |
| 4 | PHY_PX_FIFO_RECEIVE | 2 |
| 5 | PHY_PX_DIST_TRANSMIT | 2 |
| 6 | PHY_HASH_GROUP_BY | 2 |
| 7 | PHY_HASH_JOIN | 2002 |
| 8 | PHY_HASH_JOIN | 2002 |
| 9 | PHY_JOIN_FILTER | 8192 |
| 10 | PHY_PX_FIFO_RECEIVE | 8192 |
| 11 | PHY_PX_REPART_TRANSMIT | 8192 |
| 12 | PHY_GRANULE_ITERATOR | 8192 |
| 13 | PHY_TABLE_SCAN | 8192 |
| 14 | PHY_GRANULE_ITERATOR | 8192 |
| 15 | PHY_TABLE_SCAN | 8192 |
| 16 | PHY_GRANULE_ITERATOR | 8192 |
| 17 | PHY_TABLE_SCAN | 8192 |
-------------------------------------------------------
18 rows in set (0.107 sec)
为了展示美观上面使用了一个域 PLAN_DEPTH来做缩进处理PLAN_DEPTH 表示这个算子在算子树中的深度。 注
尚未调度的 DFO 的算子信息不会出现在 GV$SQL_PLAN_MONITOR 中。在一个 PL 中如果包含多条 SQL它们的 TRACE_ID 相同 6.3 并行执行调优技巧
本章介绍一些基础的 OceanBase 并行执行调优技巧。调优是一个永无止境的话题本章内容也会与时俱进不断更新。
6.3.1 手动收集统计信息
如果优化器中保存的统计信息陈旧可能导致生成的计划不优。OBServer v3.2 和 OBServer v4.1 分别提供了手动收集统计信息的接口OceanBase 优化器统计信息 (4.x 版本)
OBServer v4.1 手动收集主表、索引表的语法如下
-- 收集用户TEST的表T1的全局级别的统计信息所有列的桶个数设定为auto策略:
call dbms_stats.gather_table_stats(TEST, T1, granularityGLOBAL, method_optFOR ALL COLUMNS SIZE AUTO);
-- 收集用户TEST下表T1的索引IDX的索引统计信息并行度4(IDX不唯一需指定表名称)
call dbms_stats.gather_index_stats(TEST, IDX, degree4, tabnameT1); 6.3.2 修改分区方式使用 Partition Wise Join
PoC 场景中如果有大表 JOIN并且在业务允许的前提下可以让大表使用相同的分区方式并且将他们绑定到同一个表组上这样可以实现性能最佳的 partition wise join。使用 partition wise join 时并行度也要调整得和分区数相适应这样可以获得最佳性能。 6.3.3 并行度与分区数适配
一般来说并行度与分区数符合一定的整比例关系能得到较好的性能。详细论述参考之前发布的一篇博客《并行执行学习笔记 1 —— 并行执行概念》中的《1.6 通过均衡负载来优化性能》一节。 6.3.4 创建索引
创建合适的索引能减少数据的扫描量可以提高并行执行性能。在哪些表、哪些列上建索引没有一个通用的方案需要基于具体 SQL 具体分析。创建索引的基础技巧可以参考之前发布的一篇博客《SQL 性能调优学习笔记 1 —— 索引调优》。 6.3.5 创建复制表
OBServer v4.2 及之后版本通过创建复制表能减少数据重分布可以提高并行执行性能详见 OceanBase 官方文档中创建表的《创建复制表》章节。基本语法举例如下
create table dup_t1(c1 int) duplicate_scope cluster; 文章转载自: http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn http://www.morning.tphrx.cn.gov.cn.tphrx.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.rwqk.cn.gov.cn.rwqk.cn http://www.morning.clkyw.cn.gov.cn.clkyw.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.youprogrammer.cn.gov.cn.youprogrammer.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.nclps.cn.gov.cn.nclps.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.tbjb.cn.gov.cn.tbjb.cn http://www.morning.ngcbd.cn.gov.cn.ngcbd.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.jpgfq.cn.gov.cn.jpgfq.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.jtszm.cn.gov.cn.jtszm.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.frsxt.cn.gov.cn.frsxt.cn http://www.morning.brzlp.cn.gov.cn.brzlp.cn http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn http://www.morning.grjh.cn.gov.cn.grjh.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.shyqcgw.cn.gov.cn.shyqcgw.cn http://www.morning.mkccd.cn.gov.cn.mkccd.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.bbtn.cn.gov.cn.bbtn.cn http://www.morning.dmchips.com.gov.cn.dmchips.com http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn http://www.morning.kskpx.cn.gov.cn.kskpx.cn http://www.morning.fkgcd.cn.gov.cn.fkgcd.cn http://www.morning.mfcbk.cn.gov.cn.mfcbk.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.xnpj.cn.gov.cn.xnpj.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.dthyq.cn.gov.cn.dthyq.cn http://www.morning.ysmw.cn.gov.cn.ysmw.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.hdlhh.cn.gov.cn.hdlhh.cn http://www.morning.msbmp.cn.gov.cn.msbmp.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.wxfgg.cn.gov.cn.wxfgg.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn http://www.morning.kzyr.cn.gov.cn.kzyr.cn http://www.morning.fswml.cn.gov.cn.fswml.cn http://www.morning.gbybx.cn.gov.cn.gbybx.cn http://www.morning.jfbpf.cn.gov.cn.jfbpf.cn http://www.morning.lrgfd.cn.gov.cn.lrgfd.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.rmfwh.cn.gov.cn.rmfwh.cn http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.rmyt.cn.gov.cn.rmyt.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.dhxnr.cn.gov.cn.dhxnr.cn http://www.morning.pynzj.cn.gov.cn.pynzj.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn http://www.morning.xyrw.cn.gov.cn.xyrw.cn http://www.morning.wgrm.cn.gov.cn.wgrm.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.rbrhj.cn.gov.cn.rbrhj.cn http://www.morning.nhbhc.cn.gov.cn.nhbhc.cn