通過分析SQL語句的執行計畫優化SQL 總結

2021-10-23 07:14:37 字數 5084 閱讀 3054

做dba快7年了,中間感悟很多。在dba的日常工作中,調整個別效能較差的sql語句時一項富有挑戰性的工

作。其中的關鍵在於如何得到sql語句的執行計畫和如何從sql語句的執行計畫中發現問題。總是想將日常

經驗的點點滴滴總結一下,但是直到最近才下定決心,總共花了3個週末時間,才將其整理成冊,便於自

己日常工作。不好意思獨享,所以將其貼出來。

修改日誌:

2006.02.20:

根據網友反饋已做部分修改,但pdf檔案沒有做修改,修改部分在「如何產生執行計畫」關於set

autotraceonly的介紹部分

第一章、第2章並不是很重要,是自己的一些想法,關於如何做乙個穩定、高效的應用系統的一些想法。

第三章以後都是比較重要的。

附錄的內容也是比較重要的。我常用該部分的內容。

前言本文件主要介紹與sql調整有關的內容,內容涉及多個方面:sql語句執行的過程、oracle優化器,表之間

的關聯,如何得到sql執行計畫,如何分析執行計畫等內容,從而由淺到深的方式了解sql優化的過程,使

大家逐步步入sql調整之門,然後你將發現……。

該文件的不當之處,敬請指出,以便進一步改正。請將其發往我的信箱:xu_yu_

如果引用本文的內容,請著名出處

目錄第1章效能調整綜述

第2章有效的應用設計

第3章 sql語句處理的過程

第4章 oracle的優化器

第5章 oracle的執行計畫

訪問路徑(方法) -- access path

表之間的連線

如何產生執行計畫

如何分析執行計畫

如何干預執行計畫 - - 使用hints提示

具體案例分析

第6章其它注意事項

附錄 第1章效能調整綜述

oracle資料庫是高度可調的資料庫產品。本章描述調整的過程和那些人員應與oracle伺服器的調整有關,

以及與調整相關聯的作業系統硬體和軟體。本章包括以下方面:

l 誰來調整系統?

l 什麼時候調整?

l 建立有效調整的目標

l 在設計和開發時的調整

l 調整產品系統

l 監控產品系統

誰來調整系統:

為了有效地調整系統,若干類人員必須交換資訊並牽涉到系統調整中,例如:

l 應用設計人員必須傳達應用系統的設計,使得每個人都清楚應用中的資料流動.

l 應用開發人員必須傳達他們選擇的實現策略,使得語句調整的過程中能快速、容易地識別有問題的應用

模組和可疑的sql語句.

l 資料庫管理人員必須仔細地監控系統活動並提供它們的資料,使得異常的系統效能可被快速得識別和糾

正.l 硬體/軟體管理人員必須傳達系統的硬體、軟體配置並提供它們的資料,使得相關人員能有效地設計和

管理系統。

簡而言之,與系統涉及的每個人都在調整過程中起某些作用,當上面提及的那些人員傳達了系統的特性並

提供了它們的資料,調整就能相對的容易和更快一些。

不幸的是,事實上的結果是:資料庫管理員對調整負有全部或主要的責任。但是,資料庫管理員很少有合

適的系統方面的資料,而且,在很多情況下,資料庫管理員往往是在實施階段才介入資料庫,這就給調整

工作帶來許多負面的影響,因為在設計階段的缺陷是不能通過dba的調整而得以解決,而設計階段的缺陷

往往對資料庫效能造成極大的影響。

其實,在真正成熟的開發環境下,開發人員作為純**編寫人員時,對效能的影響最小,此時大部分的工

作應由應用設計人員完成,而且資料庫管理員往往在前期的需求管理階段就介入,為設計人員提供必要的

技術支援。

調整並不是資料庫管理員的專利,相反大部分應該是設計人員和開發人員的工作,這就需要設計人員和開

發人員具體必要的資料庫知識,這樣才能組成乙個高效的團隊,然而事實上往往並非如此。

什麼時候作調整?

多數人認為當使用者感覺效能差時才進行調整,這對調整過程中使用某些最有效的調整策略來說往往是太遲

了。此時,如果你不願意重新設計應用的話,你只能通過重新分配記憶體(調整sga)和調整i/o的辦法或多或

少地提高效能。oracle提供了許多特性,這些特性只有應用到正確地設計的系統中時才能夠很大地提高性

能。應用設計人員需要在設計階段設定應用的效能期望值。然後在設計和開發期間,應用設計人員應考慮哪些

oracle 特性可以對系統有好處,並使用這些特性。

通過良好的系統設計,你就可以在應用的生命週期中消除效能調整的代價和挫折。圖1-1圖1-2說明在應用

的生命週期中調整的相對代價和收益,正如你見到的,最有效的調整時間是在設計階段。在設計期間的調

整能以最低的代價給你最大的收益。

圖1-1 在應用生命週期中調整的代價

圖1-2 在應用生命週期中調整的收益

當然,即使在設計很好的系統中,也可能有效能降低。但這些效能降低應該是可控的和可以預見的。

調整目標

不管你正在設計或維護系統,你應該建立專門的效能目標,它使你知道何時要作調整。如果你試圖胡亂地

改動初始化引數或sql 語句,你可能會浪費調整系統的時間,而且無什麼大的收益。調整你的系統的最有

效方法如下:

l 當設計系統時考慮效能

l 調整作業系統的硬體和軟體

l 識別效能瓶頸

l 確定問題的原因

l 採取糾正的動作

當你設計系統時,制定專門的目標;例如,響應時間小於3秒。當應用不能滿足此目標時,識別造成變慢

的瓶頸(例如,i/o競爭),確定原因,採取糾正動作。在開發期間,你應測試應用研究,確定在採取應

用之前是否滿足設計的效能目標。

當你正在維護生產庫系統時,有多種快速有效的方法來識別效能瓶頸。

不管怎樣,調整通常是一系列開銷。一旦你已確定了瓶頸,你可能要犧牲一些其它方面的指標來達到所要

的結果。例如,如果i/o有問題,你可能需要更多記憶體或磁碟。如果不可能買,你可能要限制系統的併發

性,來獲取所需的效能。然而,如果你已經明確地定義了效能的目標,那用什麼來交換高效能的決策就變

的很容易的,因為你已經確定了哪些方面是最重要的,如過我的目標為高效能,可能犧牲一些空間資源。

隨著應用的越來越龐大,硬體效能的提高,全面的調整應用逐漸變成代價高昂的行為,在這樣情況下,要

取得最大的投入/效率之比,較好的辦法是調整應用的關鍵部分,使其達到比較高的效能,這樣從總體上

來說,整個系統的效能也是比較高的。這也就是有名的20/80原則,調整應用的20%(關鍵部分),能解決

80%的問題。

在設計和開發系統時作調整

良好設計的系統可以防止在應用生命週期中產生效能問題。系統設計人員和應用開發人員必須了解oracle

的查詢處理機制以便寫出高效的sql語句。「第2章有效的應用設計」討論了你的系統中各種可用的配置

,以及每種配置更適合哪種型別的應用。「第5章優化器」討論了oracle的查詢優化器,以及如何寫語句

以獲取最快的結果。

當設計你的系統時,使用下列優化效能的準則:

l 消除客戶機/伺服器應用中不必要的網路傳輸。-- 使用儲存過程。

l 使用適合你系統的相應oracle伺服器選件(例如,並行查詢或分布式資料庫)。

l 除非你的應用有特殊的需要,否則使用預設的oracle鎖。

l 利用資料庫記住應用模組,以便你能以每個模組為基礎來追蹤效能。

l 選擇你的資料塊的最佳大小。 -- 原則上來說大一些的效能較好。

l 分布你的資料,使得乙個節點使用的資料本地存貯在該節點中。

調整產品系統

本節描述對應用系統快速、容易地找出效能瓶頸,並決定糾正動作的方法。這種方法依賴於對oracle服務

器體系結構和特性的了解程度。在試圖調整你的系統前,你應熟悉oracle調整的內容。

為調整你已有的系統,遵從下列步驟:

l 調整作業系統的硬體和軟體

l 通過查詢v $session_wait檢視,識別效能的瓶頸,這個動態效能檢視列出了造成會話(session)等待的

事件。l 通過分析v $session_wait中的資料,決定瓶頸的原因。

l 糾正存在的問題。

監控應用系統

這主要是通過監控oracle的動態檢視來完成。

各種有用的動態檢視:如v$session_wait, v$session_event等。

第2章有效的應用設計

我們通常將最常用的應用分為2種型別:聯機事務處理型別(oltp),決策支援系統(dss)。

聯機事務處理(oltp)

該型別的應用是高吞吐量,插入、更新、刪除操作比較多的系統,這些系統以不斷增長的大容量資料為特

徵,它們提供給成百使用者同時訪問,典型的oltp系統是訂票系統,銀行的業務系統,訂單系統。otlp的主

要目標是可用性、速度、併發性和可恢復性。

當設計這類系統時,必須確保大量的併發使用者不能干擾系統的效能。還需要避免使用過量的索引與

cluster 表,因為這些結構會使插入和更新操作變慢。

決策支援(dss)

該型別的應用將大量資訊進行提取形成報告,協助決策者作出正確的判斷。典型的情況是:決策支援系統

將oltp應用收集的大量資料進行查詢。典型的應用為客戶行為分析系統(超市,保險等)。

決策支援的關鍵目標是速度、精確性和可用性。

該種型別的設計往往與oltp設計的理念背道而馳,一般建議使用資料冗餘、大量索引、cluster table、

並行查詢等。

近年來,該型別的應用逐漸與olap、資料倉儲緊密的聯絡在一起,形成的乙個新的應用方向。

2樓 06-01-12 17:25 [ 大中小

sunnyxu

一般會員

註冊日期: 2004 nov

來自:技術貼數:38

精華貼數:1

論壇積分:267

論壇排名:9743

論壇徽章:0

第3章 sql語句處理的過程

在調整之前我們需要了解一些背景知識,只有知道這些背景知識,我們才能更好的去調整sql語句。

本節介紹了sql語句處理的基本過程,主要包括:

· 查詢語句處理

· dml語句處理(insert, update, delete)

· ddl 語句處理(create .. , drop .. , alter .. , )

· 事務控制(commit, rollback)

Access中的SQL語句

access資料庫的sql語句教學 2009 07 01 20 50 47作者 網際網路瀏覽次數 229文字大小 大 中 小 引子 如何找到access資料庫的sql檢視 1 單擊下圖左側的 2 單擊上圖頂部的,彈出如下圖對話方塊 5 單擊 關閉 此時在選單中的檔案選單下面出現乙個sql的下拉框 6...

SQL常用的增刪改查語句 視屏筆記

sql 結構化查詢語言,是國際化標準組織採納的標準資料庫語言 作用 資料庫管理員可以用利用次語言運算元據庫系統,即 sql是一種能夠被資料庫系統讀懂的操作語言。t sql是微軟公司針對sql server這種關聯式資料庫所定義的一種sql語言,使用者可以完成server資料庫中的所有操作。sql的分...

OracleSQL語句的執行計畫優化的總結

通過分析sql語句的執行計畫優化sql 總結 第一章 第2章並不是很重要,是自己的一些想法,關於如何做乙個穩定 高效的應用系統的一些想法。第三章以後都是比較重要的。附錄的內容也是比較重要的。我常用該部分的內容。前言 本文件主要介紹與sql調整有關的內容,內容涉及多個方面 sql語句執行的過程 ora...