日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁西西教程數(shù)據(jù)庫教程 → Oracle數(shù)據(jù)庫該如何著手優(yōu)化一個SQL

      Oracle數(shù)據(jù)庫該如何著手優(yōu)化一個SQL

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2015/9/14 15:43:51字體大。A-A+

      作者:西西點擊:113次評論:0次標簽: Oracle

      • 類型:數(shù)據(jù)庫類大。42.1M語言:中文 評分:4.2
      • 標簽:
      立即下載

      這是個終極問題,因為優(yōu)化本身的復(fù)雜性實在是難以總結(jié)的,很多時候優(yōu)化的方法并不是用到了什么高深莫測的技術(shù),而只是一個思想意識層面的差異,而這些都很可能連帶導(dǎo)致性能表現(xiàn)上的巨大差異。
      所以有時候我們應(yīng)該先搞清楚需求到底是什么,SQL本身是否合理,這些思考很可能會使優(yōu)化工作事半功倍。而本文是假設(shè)SQL本身合理,從Oracle提供給我們的一些技術(shù)手段來簡單介紹下Oracle數(shù)據(jù)庫,該如何使用一些現(xiàn)有的技術(shù)來優(yōu)化一個SQL執(zhí)行的性能。

      確定需要優(yōu)化的SQL文本及當前SQL執(zhí)行計劃

      確定SQL涉及的所有表及其索引的相關(guān)信息

      運行SQL Tuning Advisor 得到調(diào)整建議供優(yōu)化參考

      收集表信息

      收集索引信息

      SQL Profile

      物化視圖

      1. 確定需要優(yōu)化的SQL文本及當前SQL執(zhí)行計劃

      優(yōu)化之前先確定好需要優(yōu)化的SQL文本以及當前SQL的執(zhí)行計劃是什么樣,注意PL/SQL Developer這類工具F5看到的執(zhí)行計劃很可能并不準確。
      相關(guān)內(nèi)容參考:

      SQL Tuning 基礎(chǔ)概述01 - Autotrace的設(shè)定

      SQL Tuning 基礎(chǔ)概述02 - Explain plan的使用

      SQL Tuning 基礎(chǔ)概述03 - 使用sql_trace和10046事件跟蹤執(zhí)行計劃

      2. 確定SQL涉及的所有表及其索引的相關(guān)信息

      確定查詢涉及到的所有表及其索引的相關(guān)基礎(chǔ)信息。比如:

      各表的數(shù)據(jù)量
      表和索引類型
      表分區(qū)信息,每個分區(qū)的數(shù)據(jù)量
      索引字段
      索引分區(qū)信息
      表關(guān)聯(lián)方式
      結(jié)果集的數(shù)量

      確定相關(guān)信息,以T2表為例:


      --普通表/分區(qū)表信息select * from dba_tables where table_name = 'T2';select * from dba_part_tables where table_name = 'T2'; 
      --普通表/分區(qū)表的每個分區(qū)大約__G大小select (t.bytes/1024/1024) "MB", t.* from dba_segments t where segment_name = 'T2';  
      
      --表數(shù)據(jù)量信息--普通表的數(shù)據(jù)量select count(1) from T2; --____數(shù)據(jù)左右--分區(qū)表的某個分區(qū)數(shù)據(jù)量select count(*) from T2 partition(P20160101);  --____數(shù)據(jù)左右select count(*) from T2 partition(P20160102);--表索引信息--普通表索引及各個索引的索引列select * from dba_indexes where table_name = 'T2';select * from dba_ind_columns where index_name in (select index_name from dba_indexes where table_name = 'T2')order by index_name, column_position;--分區(qū)表索引及各個索引的索引列select * from dba_part_indexes where table_name = 'T2';select * from dba_ind_columns where index_name in (select index_name from dba_part_indexes where table_name = 'T2') order by index_name, column_position;--索引段大小信息--select (t.bytes/1024/1024) "MB", t.* from dba_segments t where segment_name in (select index_name from dba_part_indexes where table_name = 'T2') order by segment_name, partition_name;

      3. 運行SQL Tuning Advisor 得到調(diào)整建議供優(yōu)化參考

      運行SQL Tuning Advisor 得到調(diào)整建議供優(yōu)化參考, SQL Tuning Advisor得到的優(yōu)化建議僅供參考,具體如何做還需要結(jié)合業(yè)務(wù)實際情況。

      4. 收集表信息

      例如收集ZJY用戶下T2表的統(tǒng)計信息。(T2是range分區(qū)表,按天分區(qū),每天數(shù)據(jù)量大概80w,存放半年)


      SQL> execute dbms_stats.gather_table_stats(ownname => 'ZJY', tabname => 'T2', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', cascade => TRUE, degree => 16);
       
      PL/SQL procedure successfully completed
       
      Executed in 5896.641 seconds


      統(tǒng)計信息加鎖/解鎖


      --鎖住表的統(tǒng)計信息exec dbms_stats.lock_table_stats('ZJY','T2'); 
      --解鎖表的統(tǒng)計信息exec dbms_stats.unlock_table_stats('ZJY','T2');


      相關(guān)內(nèi)容參考:

      【轉(zhuǎn)載】dbms_stats 導(dǎo)入導(dǎo)出表統(tǒng)計信息

      5. 收集索引信息

      例如只收集ZJY用戶下T2表的索引IDX_T2_1統(tǒng)計信息。(IDX_T2_1是分區(qū)索引,包含4個字段)


      SQL> execute dbms_stats.gather_index_stats(ownname => 'ZJY', indname => 'IDX_T2_1', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, degree => 8);
       
      PL/SQL procedure successfully completed
       
      Executed in 44.312 seconds


      有時還很可能需要在業(yè)務(wù)閑時在線創(chuàng)建新的索引


      --不記錄日志在線并行創(chuàng)建單列索引IDX_T2_2(并行度視生產(chǎn)環(huán)境當前的CPU資源使用情況來確定合理的值)create index IDX_T2_2 on T2(start_time) tablespace DBS_I_JINGYU nologging parallel 12 online;alter index IDX_T2_2 noparallel;alter index IDX_T2_2 logging;


      6. SQL Profile

      SQL Profile是10g中的新特性,作為自動SQL調(diào)整過程的一部分。SQL Profile是一個對象,它包含了可以幫助查詢優(yōu)化器為一個特定的SQL語句找到高效執(zhí)行計劃的信息。這些信息包括執(zhí)行環(huán)境、對象統(tǒng)計和對查詢優(yōu)化器所做評估的修正信息。它的最大優(yōu)點之一就是在不修改SQL語句和會話執(zhí)行環(huán)境的情況下影響查詢優(yōu)化器的決定。SQL Profile中包含的并非單個執(zhí)行計劃的信息,SQL Profile不會固定一個SQL語句的執(zhí)行計劃。當表的數(shù)據(jù)增長或者索引創(chuàng)建、刪除,使用同一個SQL Profile的執(zhí)行計劃可能會改變,而存儲在SQL Profile中的信息會繼續(xù)起作用。所以,經(jīng)過一段很長的時間之后,它的信息有可能會過時,需要重新生成。

      相關(guān)內(nèi)容參考:

      【轉(zhuǎn)載】sql_profile的使用

      【轉(zhuǎn)載】sql_profile快速綁定腳本

      7. 物化視圖

      Oracle的物化視圖可以用于預(yù)先計算并保存(表連接或聚集等耗時較多的操作的)結(jié)果,所以合理使用物化視圖,會在執(zhí)行查詢時避免進行這些耗時的操作,從而快速的得到結(jié)果。


        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)