對sql語句進行調整,往往有一項前期工作,就是定位最常用的sql 語句。oracle資料庫可以從多個方面取得sql語句。如從資料庫自身的儲存過程或者函式中取得,也可以從前台的應用程式中取得。所以,資料庫管理員必須學會如何從資料庫當前程式庫快取中對已經存在的sql語句進行取樣。了解當前使用最頻繁的sql語句以及其對應的資源消耗情況。只有如此,資料庫管理員才能夠對症下藥,解決sql語句執行效率不高的問題。
在oracle資料庫中有多種方法可以幫助資料庫管理員定位常用的sql語句。筆者在這裡介紹比較常用的兩種方法。
一、查詢系統表sys.wrh$_sqlsta。
如上面這張表中,他會反映某個特定sql語句的執行資訊。其中第乙個引數excutions_total引數紀錄了某條sql語句總共執行的次數。而第二個引數disk-reads-totali引數則統計了從磁碟中讀取資料的次數。當sql語句的執行次數特別多而且又是多次從磁碟中讀取資料的話,那麼資料庫管理員就要注意了。因為從磁碟中讀取資料要比從記憶體中讀取資料慢的多。此時,若資料庫管理員能夠想方設法,讓這些執行頻率高的sql語句不直接從磁碟中讀取資料,而是從記憶體中讀取資料,那麼就可以非常有效的提高sql語句的執行效率。
另外資料庫可以員也可以通過statspack方法來定位sql語句。當我們啟用這個功能的時候,資料庫會生成一張stats$sql_summary的表。他的功能跟上面這張表類似,只是他會有選擇的紀錄相關的資訊。
所以,如果資料庫管理員想用這種方法來定位sql語句的話,那麼需要同時做好兩項工作
一是需要根據sql調整過程來隨時調整這個指標。當我們資料庫管理員需要對sql語句進行調整的時候,就必須要降低指標值。如此才能夠定位那些不常用的sql語句,並對其進行調整。但是,降低指標值會導致資料庫向這個表中新增更多的紀錄。此時,資料庫管理員在調整過後,就要手工刪除這錶中多餘的資料。
二是要定期的檢視這錶中的內容。因為隨著系統應用時機的不同,有些sql語句可能在某個時段後不再使用。所以,如果sql調整不再使用這些內容的話,則資料庫管理員從這張表中刪除他們就顯得非常的必要了。
二、使用第三方工具對其進行定位。
除了oracle資料庫自帶的工具之外,我們資料庫管理員還可以利用一些第三方的工具或者指令碼來對常用的sql語句進行定位。
如有些公司開發了一些gui工具。這些工具可以幫助我們資料庫管理員迅速顯示程式庫快取中的sql 語句,並且通過一些引數,還可以抽取執行頻率比較高的或者耗用資源比較多的sql語句。另外,我們也可以自己寫一些sql指令碼。通過這個指令碼來直接讀取資料庫快取中的sql語句。
採用第三方工具有時候會比上面這個方法更加的有用。因為上面這個方法其紀錄的是乙個過去式的結果。而直接在快取中讀取的資料,則反映的是及時的資料。如當使用者發覺資料庫效能降低的時候,則資料庫管理員可以採用這些工具,了解sql語句的執**況,看看是否是因為sql語句所造成的。
當資料庫管理員找到影響資料庫效能的那個sql語句之後,我們就可以對每個可疑的sql語句進行調整。
如資料庫管理員可以更改優化器模式。在oracle資料庫中,提供了不少的優化器模式,如最快優化器或者耗用資源最少優化器等等。資料庫管理員可以嘗試更改不同的優化器模式,然後讓資料庫產生多個執行計畫。通過對每個計畫進行追蹤、分析、計時,來確定那個執行計畫具有最快的執行時間。
如可以新增提示,來強制改變執行計畫,來獲得最優的執行時間。調整sql語句的過程包含多個操作。sql語句的調整從全域性水平轉移到特定的水平。sql語句調整的終極目標是縮短sql語句的執行時間。oracle資料庫中不同的執行計畫,其執行所需要的時間是不同的。出於調整的需要,資料庫管理員可以通過向所選擇的語句中新增提示的方式,強制對執行計畫進行修改。
如可以通過新增索引來刪除不必要的全表掃瞄。索引是提高資料庫查詢效能的乙個法寶。當sql語句查詢效率低下,資料庫管理員想到的第乙個方法就是能否對錶新增合適的索引來提高sql語句的查詢效率。通過對錶新增索引,特別是基於點陣圖和基於函式的索引, 可以防止一些不必要的全表掃瞄。不過,在後續調整的過程中給表新增索引的話,要注意乙個問題。就是新增索引後,可能會造成許多其他的sql語句執行計畫的改變。所以,在為某乙個sql語句調整新增或者刪除了某個索引之後,可能會發現其他的sql語句執行效率有所改變。故一般在後期的sql語句調整過程中,我們都不怎麼建議資料庫管理員對原來的索引進行調整。在確實有必要的情況下,資料庫管理員要能夠站在乙個全域性的角度,去評估索引更改後對其他sql語句執行計畫的影響。從而最終確定這麼處理是否合適。
另外在對單獨的sql語句進行調整的時候,還需要注意乙個持久化的問題。也就是說,對sql語句的調整,無論是執行計畫的調整,還是優化器模式的改變,其效果不能夠只是暫時的。讓sql語句調整變得更持久,只有如此,調整才有實際意義。
如何才能夠提高調整後的sql語句的永續性呢?筆者這裡有乙個小的建議。如果通過以上的定位方法,了解到某條sql語句執行頻率非常高,或者耗用的資源比較多,又或者多次從磁碟中讀取資料。對於這種sql語句,如何保證調整的持久化呢?此時,可以改變sql語句的**來達到持久化的目的。如當資料庫管理員發現sql語句是**於應用程式。此時,在調整的過程中,資料庫管理員可以考慮,把應用程式傳遞過來的sql語句打包放入儲存過程,然後把儲存過過程放入oracle系統的軟體包中來實現。他可以讓我們定。位sql語句的工作來的簡單;而且,他還使得所有遠端 的應用程式更加便於移植,因為對oracle的呼叫都是封裝在資料庫函式或者過程之中。
從以上的分析中我們可以看出,要對sql語句進行調整,無論是採取何種方式,第一件工作就是要定位需要對哪些sql語句進行調整。為了提高調整的效果,哪些執行頻率高、耗用資源多的sql語句,就成為我們調整的物件。所以,如何定位這些語句就顯得至關重要。我們只要找到這些sql語句,就可以使得我們的優化工作事半功倍。
mysql資料庫中最常用的幾個命令
1 create database dbname default character set utf8 collate utf8 general ci 建立資料庫的語句 2 mysql h 172.16.40.110 uroot p 回車 輸入登入的密碼 遠端登入資料庫的命令 3 mysqladmi...
Eclipse中最常用的熱鍵
eclipse中最常用的熱鍵 1,ctrl d 刪除選中的幾行 2,alt 上下箭頭 移動選中的 塊 3,alt 左右箭頭 回退 前進 4,alt shift 上下箭頭 複製選中的 塊 5,sysout ctrl space 生成system.out.println 6,main ctrl spac...
企業應用開發中最常用c 庫
log4cpp,跟log4j一樣,不說最重要,絕對是最常用的。zk 客戶端,memcached,libmemcached redis客戶端,hiredis json,目測rapidjson還不錯,分布式系統中使用應該說是最頻繁的 xml解析,tinyxml 多執行緒,openmp 網路程式設計,bo...