11月份参加了Oracle嘉年华,分享心得一则:

我们经常会遇到这样的情况,生产环境一段SQL非常慢,而我们又没有生产的操作权限,这时候怎么办?

很多时候我们会选择在测试环境进行测试,但由于环境的不同(表结构、数据、参数、统计信息等)必然无法每次都能完全的重现问题。

这时候我们可以把数据导一份到测试环境,但又会遇到另一个问题:生产环境的数据量太大,由于测试环境表空间限制,或者其他原因,导致10几张千万级甚至上亿的表无法同步到测试环境。

即便我们申请到各种资源,各方都配合,把表同步到测试环境,也有可能出现统计信息不一致,而导致无法重现性能问题的情况。

这时候,怎么破?

刚刚上面一大段话提出几个问题:生产环境没有操作权限

由于环境问题,无法重现问题

生产环境数据量过大

统计信息不一致

这里我说下几个问题的解决方案:生产环境没有操作权限 ---到测试环境定位问题

由于环境数据分布等问题,无法重现问题  ---导入生产数据

生产环境数据量过大  ---使用sample抽样提取一定百分比的数据

统计信息不一致  ---导出生产统计信息,导入到测试环境

第一和第二个问题都比较简单,也好理解

第三个问题

是我们经常遇到的,几亿的数据量,全部导回是难以得到DBA的配合的,如果选择只导出10%或者1%的数据量,则会好很多

但是我们如何选取这10%的数据呢?

一、 使用rownumSQL> create table test_objects as select * from dba_objects;

Table created

SQL> select count(*) from test_objects;

COUNT(*)

----------

76269

SQL> select count(*) from test_objects where rownum <= 76000;

COUNT(*)

----------

76000

二、 使用sample关键字进行选择:SQL> select count(*) from test_objects sample(10);

COUNT(*)

----------

7756

这里的sample(10)就是抽样取10%的数据,速度非常快,但是sample有几个需要注意的地方:只支持单表的查询

数据分布不均

加上 BLOCK选项时表示随机取数据块,而不是随机取记录行Caution:

The use of statistically incorrect assumptions when using this feature can lead to incorrect or undesirable results.

如何保证其数据的分布特征和生产尽量一致呢?

三、使用随机函数排序获取select count(*) from (select * from test_objects ORDER BY DBMS_RANDOM.random) where rownum <= 76000;

其中一和三都需要手动算出要取的百分比数据量有多少,然后使用rownum

第四个问题

统计信息导出导入

1. 创建表ST_EMPBEGIN

DBMS_STATS.CREATE_STAT_TABLE(OWNNAME => 'SCOTT',---收集统计信息的表的owner

STATTAB => 'ST_EMP',---收集统计信息的表名

TBLSPACE => 'USERS');

---收集统计信息的表空间

END;

2. 导出统计信息到ST_EMP

BEGIN

DBMS_STATS.EXPORT_TABLE_STATS(OWNNAME => 'SCOTT',---要分析的表owner

TABNAME => 'EMP',---要分析的表名

STATOWN => 'SCOTT',---收集统计信息的表owner

STATTAB => 'ST_EMP',---收集统计信息的表名

STATID => 'EMP_STATS',---标示ID

CASCADE => TRUE);

END;

3. 用expdp导出统计信息表ST_EMP

4. 用impdp导入到测试环境

5. 将统计信息导入到表BEGIN

DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME => 'SCOTT', ---目标表owner

TABNAME => 'EMP',---目标表名

STATOWN => 'SCOTT',---收集统计信息的表owner

STATTAB => 'ST_EMP',---收集统计信息的表

CASCADE => TRUE,

STATID  => 'EMP_STATS');---标示ID

END;

6. 删除统计信息表

BEGIN

DBMS_STATS.DROP_STAT_TABLE(OWNNAME => 'SCOTT', STATTAB => 'ST_EMP');

END;

PS.

可以看看统计信息表里有啥:

附嘉年华自拍一张 :)

oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据相关推荐

  1. Oracle 12c数据库优化器统计信息收集的最佳实践

    Oracle 12c数据库优化器统计信息收集的最佳实践 转载自     沃趣科技(ID:woqutech) 作者         刘金龙(译) 原文链接   http://www.oracle.com ...

  2. oracle优化器统计信息相关

    优化器使用统计信息来生成每个sql语句最优的执行计划.准确的统计信息对于数据库的效率至关重要. dba和程序开发人员都应该了解一些统计信息相关知识,这可以使你更好的理解为什么会生成一个你看到的执行计划 ...

  3. oracle统计信息导出与导入目的,Oracle统计信息的导出与导入

    1 创建一个专用表保存各表的统计信息:exec dbms_stats.create_stat_table( 1 创建一个专用表保存各表的统计信息: exec dbms_stats.create_sta ...

  4. 优化器统计信息_高水位_柱状图等

    本文章为网络笔记,看了warehouse老师的视频受益匪浅,更是感觉自己技术太过初级,特写了本笔记,方便以后反复学习! 如有任何不妥,请发邮件至102448567@qq.com删除文章! 关于ware ...

  5. oracle按用户采集信息,oracle 11g 手动收集用户统计信息

    oracle 11g 手动收集用户统计信息 2020-07-25 编程之家收集整理的这篇文章主要介绍了oracle 11g 手动收集用户统计信息,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个 ...

  6. oracle tabe unlock_Oracle数据库之统计信息锁住导致收集统计信息失败引起sql执行异常...

    本文主要向大家介绍了Oracle数据库之统计信息锁住导致收集统计信息失败引起sql执行异常,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 这个是老生产谈的事情,统计信息不准确导 ...

  7. oracle consistent gets,Oracle buffer cache理解之七——统计信息!

    前文说了buffer cache的管理和DBWR进程是如何写文件的,更加具体的细节这里就不阐述了,这篇文章我们来了解一下关于buffer cache的统计信息,这里只介绍比较重要的几个统计信息参数: ...

  8. oracle dbms 存放位置,系统统计信息的保存位置

    虽然Oracle提供了一个GET_SYSTEM_STATS的功能,但是使用非常不方便,不如直接查看视图那么简单直观. 既然Oracle自己没有说明,可以通过TRACE的方式来获取Oracle将统计信息 ...

  9. oracle全库收集统计信息,Oracle快速收集全库统计信息

    环境:Oracle 11.2.0.4 采用并行的方式,快速收集全库统计信息,多用于跨版本升级之后,对全库的统计信息重新进行快速收集: --开启计时 set timing on --设置并行收集 exe ...

最新文章

  1. java多线程工具类_Java多线程系列之:线程的并发工具类
  2. 华盛顿大学《生成模型》2020秋季课程完结,课件、讲义全部放出
  3. Jupyter Notebook快捷键
  4. 具有OpenCV和相似度测量的视频输入
  5. Maven指令的生命周期
  6. HashMap的7种遍历方式
  7. 牛客IOI周赛26-提高组(逆序对,对序列,未曾设想的道路) 题解
  8. mac升级10.12后,安全和隐私中没有了安装任何来源的选项的解决办法
  9. 信息学奥赛C++语言:打擂台
  10. html5学习新的知识总结(一)
  11. php pdo 显示二进制,php – 在MySQL PDO中显示警告
  12. 时间轴app哪个好?可以记录自己过去经历的时间轴便签
  13. wps生成正态分布的随机数_生成服从标准正态分布的随机数
  14. python中等高线填充颜色_Matplotlib:使用透明颜色填充等高线图
  15. 工作流 java snaker_snaker工作流引擎
  16. 最新WordPress微信小程序社区论坛源码多端应用
  17. linux的qt下wsadata,Qtcpserver仅在调试器下返回listen函数的未知错误
  18. 如何在互联网公司求职成功
  19. Winamp输入模块编写详解
  20. nginx 301 Moved Permanently错误

热门文章

  1. Kafka学习整理三(borker(0.9.0及0.10.0)配置)
  2. 美团“二选一”被立案调查,反垄断将成为常态化
  3. 写一个求平方根的函数求一个整数的平方根因为函数类型是整形所以平方根的结果是整数,例如5,的平方根是2,而不是2.3...
  4. selenium处理12306登录
  5. 洛谷B2095 白细胞计数(sort排序)
  6. UVALive 4043 Ants(最大权匹配)
  7. #POW和POS的优势和劣势
  8. C. Neko does Maths
  9. Linux安装Kibana详细教程
  10. uni-app使用Hbuilder X如何苹果手机IOS打包、发布、运行