[img]http://dl2.iteye.com/upload/attachment/0097/6123/3329a1b2-574b-3176-b266-9933a102f631.jpg[/img]
今天客户反映查询慢,由于是生产环境,不能随便测试,因此参考下面的blog,把统计信息导出到测试服务器进行sql语句调优。
1.创建存放统计信息表
EXECUTE DBMS_STATS.CREATE_STAT_TABLE ('SCOTT', 'STATTAB','SYSAUX');
在 SYSAUX 表空间上创建 STATTAB 用以存储统计信息, 所有者是 SCOTT 用户。
2.导出schema的统计信息
EXEC dbms_stats.EXPORT_SCHEMA_STATS
(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
这里建议手动设定一下 STATID. STATID 命名规则建议用 对象名(SCHEMA名)+ 时间(注意粒度).
导出table表的统计信息
EXEC dbms_stats.export_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
3.用expdp导出统计信息表
expdp system/Oracle DIRECTORY=expdimp DUMPFILE=scottexp20110426.dmp SCHEMAS='scott'logfile=scottexp20120427.log EXCLUDE=TABLE:\"IN \(\''stattab'\'\)\"
4.把expdp导出的文件scottexp20110426.dmp 上传到测试服务器,方法很多比如scp
5.导入schema的统计信息
恢复该表的统计信息(之前要导出当前的统计信息):
exec DBMS_STATS.IMPORT_SCHEMA_STATS(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
导入table表的统计信息
EXEC dbms_stats.import_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
ownname可以指定新的
6.删除统计信息表
exec DBMS_STATS.DROP_STAT_TABLE('scott','stattab');
今天客户反映查询慢,由于是生产环境,不能随便测试,因此参考下面的blog,把统计信息导出到测试服务器进行sql语句调优。
1.创建存放统计信息表
EXECUTE DBMS_STATS.CREATE_STAT_TABLE ('SCOTT', 'STATTAB','SYSAUX');
在 SYSAUX 表空间上创建 STATTAB 用以存储统计信息, 所有者是 SCOTT 用户。
2.导出schema的统计信息
EXEC dbms_stats.EXPORT_SCHEMA_STATS
(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
这里建议手动设定一下 STATID. STATID 命名规则建议用 对象名(SCHEMA名)+ 时间(注意粒度).
导出table表的统计信息
EXEC dbms_stats.export_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
3.用expdp导出统计信息表
expdp system/Oracle DIRECTORY=expdimp DUMPFILE=scottexp20110426.dmp SCHEMAS='scott'logfile=scottexp20120427.log EXCLUDE=TABLE:\"IN \(\''stattab'\'\)\"
4.把expdp导出的文件scottexp20110426.dmp 上传到测试服务器,方法很多比如scp
5.导入schema的统计信息
恢复该表的统计信息(之前要导出当前的统计信息):
exec DBMS_STATS.IMPORT_SCHEMA_STATS(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
导入table表的统计信息
EXEC dbms_stats.import_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
ownname可以指定新的
6.删除统计信息表
exec DBMS_STATS.DROP_STAT_TABLE('scott','stattab');
本文介绍了如何在生产环境中通过导出和导入统计信息来优化SQL语句性能,包括创建统计信息表、导出schema和table的统计信息、使用expdp导出统计信息表,并在测试服务器上导入这些信息以实现SQL调优。
3253

被折叠的 条评论
为什么被折叠?



