【實驗】【analyze】分析特定使用者的表和索引
1.使用analyze方法對特定使用者的表和索引進行分析指令碼如下
ora10g@testdb183 /home/oracle$ cat analyze_schema.sql
set pagesize 6000
set heading off
spool analytab.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent;' from user_tables;
spool off
spool analyind.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent for all indexes;' from user_tables;
spool off
spool analyze.log
@analytab.sql
@analyind.sql
spool off
2.使用方法,進入到sqlplus介面
ora10g@testdb183 /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 29 20:16:29 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
3.連線到待分析的使用者,這裡是sec使用者
sys@ora10g> conn sec/sec
Connected.
4.使用“@”符號呼叫上面的analyze_schema.sql指令碼,執行過程如下(這個使用者下只有兩張表)
sec@ora10g> @analyze_schema.sql
analyze table T_PARENT estimate statistics sample 20 percent;
analyze table T_CHILD estimate statistics sample 20 percent;
analyze table T_PARENT estimate statistics sample 20 percent for all indexes;
analyze table T_CHILD estimate statistics sample 20 percent for all indexes;
Table analyzed.
Table analyzed.
Table analyzed.
Table analyzed.
sec@ora10g>
5.上面的指令碼使用的是analyze方法進行分析的,analyze方法不支援“並行”操作,下面演示一下使用dbms_stats.gather_schema_stats方法使用4並行對sec使用者的10%資料進行分析的過程。
sec@ora10g> exec dbms_stats.gather_schema_stats(OWNNAME=>'SEC',ESTIMATE_PERCENT=>10,DEGREE=>4,cascade=>true);
PL/SQL procedure successfully completed.
如果想對SEC使用者中所有表使用DBMS_STATS.GATHER_TABLE_STATS方法進行分析,可以參考如下我寫的一個語句(所有能節省DBA寶貴時間的嘗試都應該被鼓勵):
SET lin 300
SET head off
SELECT 'execute DBMS_STATS.GATHER_TABLE_STATS(ownname=>'
|| ''''
|| owner
|| ''''
|| ',tabname=>'
|| ''''
|| table_name
|| ''''
|| ',method_opt=>'
|| ''''
|| 'FOR ALL COLUMNS SIZE 254'
|| ''''
|| ',DEGREE=>4,cascade=>true);'
FROM dba_tables
WHERE dba_tables.owner = 'SEC';
6.小結
對錶和索引的定期分析有利於Oracle的CBO得到正確的執行計劃,提高系統的效能。是DBA日常維護中必做的內容。
analyze和dbms_stats兩種方法都可以完成分析的任務,如果在資源可用,並且待分析資料較大的情況下可以考慮使用dbms_stats加並行的方法進行處理。
上面只是演示了一種非常簡單的用法,更多的analyze方法請參考Oracle官方文件《ANALYZE》
更多的DBMS_STATS方法,請參考Oracle官方文件《103 DBMS_STATS》http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_stats.htm#CIHBIEII
-- The End --
ora10g@testdb183 /home/oracle$ cat analyze_schema.sql
set pagesize 6000
set heading off
spool analytab.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent;' from user_tables;
spool off
spool analyind.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent for all indexes;' from user_tables;
spool off
spool analyze.log
@analytab.sql
@analyind.sql
spool off
2.使用方法,進入到sqlplus介面
ora10g@testdb183 /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 29 20:16:29 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
3.連線到待分析的使用者,這裡是sec使用者
sys@ora10g> conn sec/sec
Connected.
4.使用“@”符號呼叫上面的analyze_schema.sql指令碼,執行過程如下(這個使用者下只有兩張表)
sec@ora10g> @analyze_schema.sql
analyze table T_PARENT estimate statistics sample 20 percent;
analyze table T_CHILD estimate statistics sample 20 percent;
analyze table T_PARENT estimate statistics sample 20 percent for all indexes;
analyze table T_CHILD estimate statistics sample 20 percent for all indexes;
Table analyzed.
Table analyzed.
Table analyzed.
Table analyzed.
sec@ora10g>
5.上面的指令碼使用的是analyze方法進行分析的,analyze方法不支援“並行”操作,下面演示一下使用dbms_stats.gather_schema_stats方法使用4並行對sec使用者的10%資料進行分析的過程。
sec@ora10g> exec dbms_stats.gather_schema_stats(OWNNAME=>'SEC',ESTIMATE_PERCENT=>10,DEGREE=>4,cascade=>true);
PL/SQL procedure successfully completed.
如果想對SEC使用者中所有表使用DBMS_STATS.GATHER_TABLE_STATS方法進行分析,可以參考如下我寫的一個語句(所有能節省DBA寶貴時間的嘗試都應該被鼓勵):
SET lin 300
SET head off
SELECT 'execute DBMS_STATS.GATHER_TABLE_STATS(ownname=>'
|| ''''
|| owner
|| ''''
|| ',tabname=>'
|| ''''
|| table_name
|| ''''
|| ',method_opt=>'
|| ''''
|| 'FOR ALL COLUMNS SIZE 254'
|| ''''
|| ',DEGREE=>4,cascade=>true);'
FROM dba_tables
WHERE dba_tables.owner = 'SEC';
6.小結
對錶和索引的定期分析有利於Oracle的CBO得到正確的執行計劃,提高系統的效能。是DBA日常維護中必做的內容。
analyze和dbms_stats兩種方法都可以完成分析的任務,如果在資源可用,並且待分析資料較大的情況下可以考慮使用dbms_stats加並行的方法進行處理。
上面只是演示了一種非常簡單的用法,更多的analyze方法請參考Oracle官方文件《ANALYZE》
更多的DBMS_STATS方法,請參考Oracle官方文件《103 DBMS_STATS》http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_stats.htm#CIHBIEII
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-613551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Analyze分析表或者索引索引
- 有索引卻走全表掃描的實驗分析索引
- MySQL 5.7 ANALYZE TABLE分析索引的統計資訊MySql索引
- oracle 表分析和索引Oracle索引
- ORACLE分析表和索引的指令碼Oracle索引指令碼
- 實驗:行遷移與分析語句 row migration and analyze statements
- oracle給使用者分配特定使用者下特定表的只讀許可權Oracle
- Oracle表與索引的分析及索引重建Oracle索引
- Oracle表與索引的分析及索引重建(轉)Oracle索引
- 建立基於事務和基於會話的臨時表及臨時表建索引的實驗會話索引
- 【analyze】使用PL/SQL 方法完成多使用者資料分析SQL
- Oracle堆組織表的索引和索引組織表Oracle索引
- 索引的分析和比較索引
- Oralce中分析表及索引索引
- oracle 定期表及索引分析Oracle索引
- ANALYZE導致的阻塞問題分析
- MySQL管理表和索引MySql索引
- [轉]:bitmap索引和B*tree索引分析索引
- 自動生成特定領域模型和圖表模型
- 【DSL】Elasticsearch之Analyze(分析過程)Elasticsearch
- IP和TCP抓包分析實驗TCP
- Oracle 表的移動和索引的重建Oracle索引
- 表分析初體驗
- Oracle對錶、索引和簇的分析Oracle索引
- Sqlserver表和索引壓縮SQLServer索引
- 索引表和 ES 的一點點思考索引
- dbms_stats與analyze分析彙總
- 【實驗】使用PRODUCT_USER_PROFILE禁止特定使用者在SQL*Plus中使用delete語句SQLdelete
- 【SQL】【指令碼】遷移當前使用者下所有表和索引到新表空間SQL指令碼索引
- SQL Server 索引和表體系結構(聚集索引)SQLServer索引
- 表和索引並行查詢索引並行
- Oracle全庫匯出和特定使用者匯入Oracle
- 分割槽表索引實踐案例索引
- iOS效能調優之Analyze靜態分析iOS
- MySQL之mysqlcheck、check、optimize和analyzeMySql
- Oracle drop,truncate partition 索引失效 實驗Oracle索引
- Lucene中建立索引的效率和刪除索引的實現索引
- easyExcel多行表頭設定不同樣式和特定單元格設定樣式的實現Excel