查看: 409|回复: 11

如何临时屏蔽 SYSTEM 的统计信息?

[复制链接]
论坛徽章:
310
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2018-8-9 10:08 | 显示全部楼层 |阅读模式
ORACLE 11204

调试SQL时,怀疑是SYSTEM的统计信息有问题,想问,有什么办法、参数,比如:类似OPT_PARAM() 之类的提示参数的可以临时关闭某个参数值,
就当没采集过 SYSTEM 。想看看在此情况下,执行计划的走法。


论坛徽章:
121
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2018-8-9 14:49 | 显示全部楼层
很简单,如下:



SQL>
SQL>
SQL> explain plan for
  2  select /*+opt_param('_optimizer_cost_model', 'io')*/ count(*) from abc;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1045519631

---------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost  |
---------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    17 |
|   1 |  SORT AGGREGATE    |      |     1 |       |
|   2 |   TABLE ACCESS FULL| ABC  |  2106 |    17 |
---------------------------------------------------

Note

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
   - cpu costing is off (consider enabling it)

13 rows selected.

SQL> expalin pan for
SP2-0734: unknown command beginning "expalin pa..." - rest of line ignored.
SQL> explain plan for
  2  select /*+ no_cpu_costing */ count(*) from abc;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1045519631

---------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost  |
---------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    17 |
|   1 |  SORT AGGREGATE    |      |     1 |       |
|   2 |   TABLE ACCESS FULL| ABC  |  2106 |    17 |
---------------------------------------------------

Note

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
   - cpu costing is off (consider enabling it)

13 rows selected.

SQL> explain plan for
  2  select count(*) from abc;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1045519631

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |    29   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| ABC  |  2106 |    29   (0)| 00:00:01 |
-------------------------------------------------------------------

9 rows selected.

SQL> ^[^[

使用道具 举报

回复
论坛徽章:
121
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2018-8-9 14:49 | 显示全部楼层
我估计大部分人看不懂你的问题

使用道具 举报

回复
论坛徽章:
310
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
 楼主| 发表于 2018-8-9 14:54 | 显示全部楼层
zergduan 发表于 2018-8-9 14:49
很简单,如下:

我想屏蔽的是这些参数

SQL>SELECT * FROM SYS.AUX_STATS$;

SNAME                          PNAME                               PVAL1 PVAL2
------------------------------ ------------------------------ ---------- ------------------------------
SYSSTATS_INFO                  STATUS                                    COMPLETED
SYSSTATS_INFO                  DSTART                                    07-24-2018 13:23
SYSSTATS_INFO                  DSTOP                                     07-24-2018 16:23
SYSSTATS_INFO                  FLAGS                                   0
SYSSTATS_MAIN                  CPUSPEEDNW                           1398
SYSSTATS_MAIN                  IOSEEKTIM                              10
SYSSTATS_MAIN                  IOTFRSPEED                           4096
SYSSTATS_MAIN                  SREADTIM                            2.241
SYSSTATS_MAIN                  MREADTIM                            2.418
SYSSTATS_MAIN                  CPUSPEED                             1402
SYSSTATS_MAIN                  MBRC                                    5
SYSSTATS_MAIN                  MAXTHR                          173596672
SYSSTATS_MAIN                  SLAVETHR                          2102272


13 rows selected.

Elapsed: 00:00:00.00

你列出的参数 opt_param,按照文档的说法,只能屏蔽几个、很有限的参数,

使用道具 举报

回复
论坛徽章:
310
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
 楼主| 发表于 2018-8-9 14:58 | 显示全部楼层
zergduan 发表于 2018-8-9 14:49
很简单,如下:

20180809_origin.jpg

11G的文档里这样描述该提示参数,



使用道具 举报

回复
论坛徽章:
121
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2018-8-9 15:17 | 显示全部楼层
ZALBB 发表于 2018-8-9 14:54
我想屏蔽的是这些参数

SQL>SELECT * FROM SYS.AUX_STATS$;

列出的是 documented参数,还有许多undcumented参数(隐含参数)是不会再官方文档中列出来的

我写的就是屏蔽操作系统统计信息

使用道具 举报

回复
论坛徽章:
310
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
 楼主| 发表于 2018-8-9 15:32 | 显示全部楼层
zergduan 发表于 2018-8-9 15:17
列出的是 documented参数,还有许多undcumented参数(隐含参数)是不会再官方文档中列出来的

我写的就 ...

看你上面的案例,似乎是列举了两种方法:

1   /*+opt_param('_optimizer_cost_model', 'io')*/
2   /*+ no_cpu_costing */

cpu costing is off (consider enabling it) 这条信息,证明达到目的?

使用道具 举报

回复
认证徽章
论坛徽章:
23
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29蒙奇·D·路飞
日期:2018-08-10 09:29:14弗兰奇
日期:2018-07-19 17:11:57娜美
日期:2018-06-22 09:24:50秀才
日期:2018-06-21 10:08:00ITPUB15周年纪念
日期:2018-03-20 15:45:33ITPUB15周年纪念
日期:2018-03-20 15:25:18托尼托尼·乔巴
日期:2018-02-05 08:12:49蒙奇·D·路飞
日期:2018-01-31 16:03:23秀才
日期:2018-01-02 15:35:05
发表于 2018-8-9 15:43 | 显示全部楼层
ZALBB 发表于 2018-8-9 14:54
我想屏蔽的是这些参数

SQL>SELECT * FROM SYS.AUX_STATS$;

这个表全屏蔽掉 就成了10G前基于I/O开销模型吧

使用道具 举报

回复
论坛徽章:
121
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2018-8-9 16:41 | 显示全部楼层
本帖最后由 zergduan 于 2018-8-9 16:42 编辑
guocun09 发表于 2018-8-9 15:43
这个表全屏蔽掉 就成了10G前基于I/O开销模型吧

其实,就是这个意思。 其实9i里已经有了cpu+io的模型,只不过默认不启用。8i才是真正的io cost模型

使用道具 举报

回复
论坛徽章:
121
现任管理团队成员
日期:2011-05-07 01:45:08
发表于 2018-8-9 16:44 | 显示全部楼层
本帖最后由 zergduan 于 2018-8-9 16:46 编辑
ZALBB 发表于 2018-8-9 15:32
看你上面的案例,似乎是列举了两种方法:

1   /*+opt_param('_optimizer_cost_model', 'io')*/

第一种是使用隐含参数,所有版本通用
第二种是常规hint


所谓的屏蔽系统统计信息,就是屏蔽cpu cost,

因为系统统计信息带来革新就是 使CBO从 io cost 变成了 cpu + io cost

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表