<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Oracle數(shù)據(jù)庫中最常用的SQL語句

    SQL語句進行調(diào)整,往往有一項前期工作,就是定位最常用的SQL 語句。Oracle數(shù)據(jù)庫可以從多個方面取得SQL語句。如從數(shù)據(jù)庫自身的存儲過程或者函數(shù)中取得,也可以從前臺的應用程序中取得。所以,數(shù)據(jù)庫管理員必須學會如何從數(shù)據(jù)庫當前程序庫緩存中對已經(jīng)存在的SQL語句進行采樣。了解當前使用最頻繁的SQL語句以及其對應的資源消耗情況。只有如此,數(shù)據(jù)庫管理員才能夠?qū)ΠY下藥,解決SQL語句執(zhí)行效率不高的問題。  在Oracle數(shù)據(jù)庫中有多種方法可以幫助數(shù)據(jù)庫管理員定位常用的SQL語句。筆者在這里介紹比較常用的兩種方法。
      一、查詢系統(tǒng)表sys.wrh$_sqlsta。
      在數(shù)據(jù)庫系統(tǒng)中有如下一張表。這張表存儲中Oracle數(shù)據(jù)庫執(zhí)行過的SQL語句的相關情況。
      
      如上面這張表中,他會反映某個特定Sql語句的執(zhí)行信息。其中第一個參數(shù)Excutions_Total參數(shù)紀錄了某條SQL語句總共執(zhí)行的次數(shù)。而第二個參數(shù)Disk-Reads-Totali參數(shù)則統(tǒng)計了從磁盤中讀取數(shù)據(jù)的次數(shù)。當SQL語句的執(zhí)行次數(shù)特別多而且又是多次從磁盤中讀取數(shù)據(jù)的話,那么數(shù)據(jù)庫管理員就要注意了。因為從磁盤中讀取數(shù)據(jù)要比從內(nèi)存中讀取數(shù)據(jù)慢的多。此時,若數(shù)據(jù)庫管理員能夠想方設法,讓這些執(zhí)行頻率高的SQL語句不直接從磁盤中讀取數(shù)據(jù),而是從內(nèi)存中讀取數(shù)據(jù),那么就可以非常有效的提高SQL語句的執(zhí)行效率。
      另外數(shù)據(jù)庫可以員也可以通過Statspack方法來定位SQL語句。當我們啟用這個功能的時候,數(shù)據(jù)庫會生成一張Stats$Sql_summary的表。他的功能跟上面這張表類似,只是他會有選擇的紀錄相關的信息。
      在Sql_Parameter會記入相關的條件。如當SQL語句執(zhí)行次數(shù)大于多少才進行紀錄;又或者當SQL語句執(zhí)行磁盤讀取次數(shù)大于多少時進行統(tǒng)計等等。通過這個過濾,會讓數(shù)據(jù)庫管理員了解更多的信息。但是,這里要注意一個問題,當任何一個指標超出(Oracle官方資料上把這個指標叫做閥值)的時候,系統(tǒng)就會往上面這個表中添加一條紀錄。所以如果這個指標設置的比較低,當數(shù)據(jù)庫比較繁忙的時候,我們會發(fā)現(xiàn)這張表會變得非常的活躍。數(shù)據(jù)庫會時不時的向這張表中添加紀錄。
      所以,如果數(shù)據(jù)庫管理員想用這種方法來定位SQL語句的話,那么需要同時做好兩項工作
      一是需要根據(jù)SQL調(diào)整過程來隨時調(diào)整這個指標。當我們數(shù)據(jù)庫管理員需要對SQL語句進行調(diào)整的時候,就必須要降低指標值。如此才能夠定位那些不常用的SQL語句,并對其進行調(diào)整。但是,降低指標值會導致數(shù)據(jù)庫向這個表中添加更多的紀錄。此時,數(shù)據(jù)庫管理員在調(diào)整過后,就要手工刪除這表中多余的數(shù)據(jù)。
      二是要定期的查看這表中的內(nèi)容。因為隨著系統(tǒng)應用時機的不同,有些SQL語句可能在某個時段后不再使用。所以,如果SQL調(diào)整不再使用這些內(nèi)容的話,則數(shù)據(jù)庫管理員從這張表中刪除他們就顯得非常的必要了。

    二、使用第三方工具對其進行定位。  除了Oracle數(shù)據(jù)庫自帶的工具之外,我們數(shù)據(jù)庫管理員還可以利用一些第三方的工具或者腳本來對常用的SQL語句進行定位。
      如有些公司開發(fā)了一些GUI工具。這些工具可以幫助我們數(shù)據(jù)庫管理員迅速顯示程序庫緩存中的SQL 語句,并且通過一些參數(shù),還可以抽取執(zhí)行頻率比較高的或者耗用資源比較多的SQL語句。另外,我們也可以自己寫一些SQL腳本。通過這個腳本來直接讀取數(shù)據(jù)庫緩存中的SQL語句。
      采用第三方工具有時候會比上面這個方法更加的有用。因為上面這個方法其紀錄的是一個過去式的結(jié)果。而直接在緩存中讀取的數(shù)據(jù),則反映的是及時的數(shù)據(jù)。如當用戶發(fā)覺數(shù)據(jù)庫性能降低的時候,則數(shù)據(jù)庫管理員可以采用這些工具,了解SQL語句的執(zhí)行情況,看看是否是因為SQL語句所造成的。
      當數(shù)據(jù)庫管理員找到影響數(shù)據(jù)庫性能的那個SQL語句之后,我們就可以對每個可疑的SQL語句進行調(diào)整。
      如數(shù)據(jù)庫管理員可以更改優(yōu)化器模式。在Oracle數(shù)據(jù)庫中,提供了不少的優(yōu)化器模式,如最快優(yōu)化器或者耗用資源最少優(yōu)化器等等。數(shù)據(jù)庫管理員可以嘗試更改不同的優(yōu)化器模式,然后讓數(shù)據(jù)庫產(chǎn)生多個執(zhí)行計劃。通過對每個計劃進行追蹤、分析、計時,來確定那個執(zhí)行計劃具有最快的執(zhí)行時間。
      如可以添加提示,來強制改變執(zhí)行計劃,來獲得最優(yōu)的執(zhí)行時間。調(diào)整SQL語句的過程包含多個操作。SQL語句的調(diào)整從全局水平轉(zhuǎn)移到特定的水平。SQL語句調(diào)整的終極目標是縮短SQL語句的執(zhí)行時間。Oracle數(shù)據(jù)庫中不同的執(zhí)行計劃,其執(zhí)行所需要的時間是不同的。出于調(diào)整的需要,數(shù)據(jù)庫管理員可以通過向所選擇的語句中添加提示的方式,強制對執(zhí)行計劃進行修改。
      如可以通過添加索引來刪除不必要的全表掃描。索引是提高數(shù)據(jù)庫查詢性能的一個法寶。當SQL語句查詢效率低下,數(shù)據(jù)庫管理員想到的第一個方法就是能否對表添加合適的索引來提高SQL語句的查詢效率。通過對表添加索引,特別是基于位圖和基于函數(shù)的索引, 可以防止一些不必要的全表掃描。不過,在后續(xù)調(diào)整的過程中給表添加索引的話,要注意一個問題。就是添加索引后,可能會造成許多其他的SQL語句執(zhí)行計劃的改變。所以,在為某一個SQL語句調(diào)整添加或者刪除了某個索引之后,可能會發(fā)現(xiàn)其他的SQL語句執(zhí)行效率有所改變。故一般在后期的SQL語句調(diào)整過程中,我們都不怎么建議數(shù)據(jù)庫管理員對原來的索引進行調(diào)整。在確實有必要的情況下,數(shù)據(jù)庫管理員要能夠站在一個全局的角度,去評估索引更改后對其他SQL語句執(zhí)行計劃的影響。從而最終確定這么處理是否合適。
      另外在對單獨的SQL語句進行調(diào)整的時候,還需要注意一個持久化的問題。也就是說,對SQL語句的調(diào)整,無論是執(zhí)行計劃的調(diào)整,還是優(yōu)化器模式的改變,其效果不能夠只是暫時的。讓SQL語句調(diào)整變得更持久,只有如此,調(diào)整才有實際意義。
      如何才能夠提高調(diào)整后的SQL語句的持久性呢?筆者這里有一個小的建議。如果通過以上的定位方法,了解到某條SQL語句執(zhí)行頻率非常高,或者耗用的資源比較多,又或者多次從磁盤中讀取數(shù)據(jù)。對于這種SQL語句,如何保證調(diào)整的持久化呢?此時,可以改變SQL語句的來源來達到持久化的目的。如當數(shù)據(jù)庫管理員發(fā)現(xiàn)SQL語句是來源于應用程序。此時,在調(diào)整的過程中,數(shù)據(jù)庫管理員可以考慮,把應用程序傳遞過來的SQL語句打包放入存儲過程,然后把存儲過過程放入Oracle系統(tǒng)的軟件包中來實現(xiàn)。他可以讓我們定。位SQL語句的工作來的簡單;而且,他還使得所有遠程 的應用程序更加便于移植,因為對Oracle的調(diào)用都是封裝在數(shù)據(jù)庫函數(shù)或者過程之中。
      從以上的分析中我們可以看出,要對SQL語句進行調(diào)整,無論是采取何種方式,第一件工作就是要定位需要對哪些SQL語句進行調(diào)整。為了提高調(diào)整的效果,哪些執(zhí)行頻率高、耗用資源多的SQL語句,就成為我們調(diào)整的對象。所以,如何定位這些語句就顯得至關重要。我們只要找到這些SQL語句,就可以使得我們的優(yōu)化工作事半功倍

    posted on 2009-04-13 13:30 MichaelLee 閱讀(313) 評論(0)  編輯  收藏 所屬分類: SQL

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    統(tǒng)計

    公告

    ====Michael Lee====
    =Java Sofware Engineer=
    =Work @ Beijing=
    ---再煩,也別忘微笑;再急,也要注意語氣;再苦,也別忘堅持;再累,也要愛自己!---
    ---低調(diào)做人,你會一次比一次穩(wěn)健;高調(diào)做事,你會一次比一次優(yōu)秀---
    ---成功的時候不要忘記過去;失敗的時候不要忘記還有未來---

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲中文字幕久久精品无码A| 免费一级毛片在线观看| 亚洲AV日韩AV永久无码久久| 无码AV动漫精品一区二区免费| 免费高清在线影片一区| 亚洲日韩AV一区二区三区四区| 一个人看的免费高清视频日本 | 最近免费最新高清中文字幕韩国 | 国产又黄又爽胸又大免费视频| 热久久精品免费视频| 亚洲偷偷自拍高清| 免费观看一级毛片| 偷自拍亚洲视频在线观看| 亚洲av日韩片在线观看| 一个人看www免费高清字幕| 亚洲中文字幕无码久久综合网| 视频免费在线观看| 老司机亚洲精品影院| 无码永久免费AV网站| 国产精品亚洲а∨天堂2021| 亚洲精品老司机在线观看| 成人久久免费网站| 亚洲视频免费在线看| 成人免费777777| 亚洲av中文无码字幕色不卡| 99精品视频在线免费观看| 亚洲性色高清完整版在线观看| 成年性生交大片免费看| 免费夜色污私人影院网站电影| 亚洲精品色午夜无码专区日韩| 最近免费中文字幕大全免费版视频| 久久综合久久综合亚洲| 亚洲国产综合人成综合网站| 人人揉揉香蕉大免费不卡| 亚洲高清中文字幕免费| www亚洲精品少妇裸乳一区二区| 美女视频黄a视频全免费网站色窝| 国产成人精品日本亚洲专区6| 亚洲av无码成人精品区在线播放| 男人都懂www深夜免费网站| 亚洲色成人网站WWW永久四虎|