久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么是SQL Profile

164次閱讀
沒有評論

共計 2467 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇內容主要講解“怎么是 SQL Profile”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“怎么是 SQL Profile”吧!

SQL Profile 是什么

SQL Profile 是我非常喜歡的一個技術,通過它可以在不修改 SQL 語句的情況下,為 SQL 綁定任何需要的 hint,與 SQL 代碼是分離的,而且相對 Baseline、outline 來說,操作步驟簡單,如果使用熟練可以在極短的時間內修正一個查詢語句的執行計劃,我已經在多個場合使用 SQL Profile 解決了數據庫的性能問題。SQL Profile 是 ORACLE 10G 出現的一個功能,SQL Profile 在 Oracle 文檔中被描述為作為 SQL Tuning Advisor 的一部分,只能通過 SQL Tuning Advisor 來使用,一般是通過運行 SQL Tuning Advisor 的 JOB,JOB 運行結束后可以查看 SQL Tuning Advisor 給出的優化建議,這些建議里可能會包含讓 DBA 采用 SQL Profile(hint 的集合),作為 ORACLE 10G 后提供的新功能,DBA 可以將 SQL 調優的工作交給 SQL Tuning Advisor 來做。正常情況下,一個 SQL 語句交給 SQL 優化器后,優化器需要在非常短的時間內,給出解析結果,但是 SQL Tuning Advisor 卻不同,它為了產生一個高效的執行計劃,可能會花費很長的時間。進一步講,它還會使用一些非常耗時的技術如 Wath-If 分析,并加強對動態采樣技術的利用來核實優化器的估計值。SQL Tuning Advisor 的任務是分析 SQL 語句并建議如何使用一些方法來提高語句的性能,包括收集遺漏或過時的對象統計信息,創建新索引,改變 SQL 語句或者采用 SQL Profile。按照官方的說法,SQL Profile 只能通過 SQL Tuning Advisor 來使用,但是本節后面的幾個章節都會使用手工創建 SQL Profile 的方式來告訴讀者如何更快速的使用、創建 SQL Profile,但是手工創建 SQL Profile 并不被 ORACLE 技術支持所支持。

簡單來說 SQL Profile 是一個對象,包含了一系列的 hint,這些 hint 包含了可以幫助優化器為一個特定的 SQL 語句找到高效執行計劃的額外信息。這些 hint 包含執行環境,對象統計信息,和對查詢優化器所作評估的修正信息,例如廣為流傳的 OPT_ESTIMATE 就是由 SQL Profile 所引入的 hint,它主要的作用是設定對象統計信息、放大或縮小優化器的評估基數、修正表連接的基數,例如,select * from a where status= Inactive,真實的返回基數為 10000,但是由于統計信息的陳舊,導致優化器認為只返回 100,因此通過 OPT_ESTIMATE 會糾正這一信息,例如通過 OPT_ESTIMATE(@ SEL$1 , TABLE, A @ SEL$1 , SCALE_ROWS=100) 來告訴優化器,對于表 A 經過謂詞過濾后返回的基數為:優化器的評估基數再放大 100 倍,也就是優化器評估基數 100,再乘以放大系數 100,最終的基數為 10000(注意 OPT_ESTIMATE 等 hint 的糾正信息并不會存儲、更新到表、索引等對象的統計信息里)。從這里我們也可以看出,SQL Profile 并不是真正的鎖定執行計劃,而只是告訴優化器一些更加真實的信息,讓優化器根據真實的信息來得到更加合理的執行計劃。因此,即使一個 SQL 使用了 SQL Profile,優化器在選擇執行計劃的時候也具有很大的靈活性,隨著數據的變化,時間的推移,這些修正因子可能也已經不再準確,因此可能會出現在某些使用了 SQL Profile 的 SQL, 剛開始這些 SQL Profile 工作的很好,但是不久就會產生一些問題。不過 SQL Profile 跟 outline、Baseline 一樣都是基于存儲一些 hint 來發揮作用的,SQL Profile 雖然默認不會使用例如 index、full 等我們常見的 hint,但是這些 hint 依然可以在 SQL Profile 里發揮作用。

SQL Profile 在 10G 和 11G 默認是被打開的,可以通過設置參數 SQLTUNE_CATEGORY 為 false 來關閉 SQL Profile。每個 SQL Profile 都被放置在一個特定的 category 中,可以在創建 SQL Profile 時指定 category 的值,如果不指定會被放在 SQLTUNE_CATEGORY 為 defualt 的 category 中。如果 SQLTUNE_CATEGORY 的值被設置為非 default 的值,那么只有 SQL Profile 的 category 的值為參數 SQLTUNE_CATEGORY 設置值的才會生效。

n Note:SQL Profile 可以為 SQL 語句添加任何 hint,例如:bind_aware 這個 hint 并不能通過 SQL Baseline 起作用,但是可以通過 SQL Profile 起作用。因為 SQL Profile 作為一種基于 hint 修正 SQL 執行計劃的機制,做的比較傻瓜化,它僅僅是把 hint 應用到特定簽名的 SQL 上,不會做其他校驗,SQL Baseline 不僅僅只是應用 hint,還需要做 plan_hash_value 值的計算校驗, 因此對于 bind_aware 這種 hint 并不能對 SQL Baseline 起作用,因為這個 hint 會導致執行計劃的不穩定性,而 Baseline 創建的時候是跟具體的 plan_hash_value 掛鉤的,不能與這種具有不穩定性的 hint 掛鉤。

n SQL Profile 可以在 DataGuard 中使用,也就是說在主庫創建 SQL Profile 后,備庫可以自動使用到在主庫上創建的 SQL Profile,但是 Baseline 不能在 DataGuard 中使用。

到此,相信大家對“怎么是 SQL Profile”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-24發表,共計2467字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 永仁县| 古蔺县| 深水埗区| 沐川县| 杭锦旗| 潜江市| 乌拉特前旗| 屏南县| 平远县| 岑溪市| 恩施市| 榆社县| 普安县| 罗田县| 安泽县| 大厂| 安仁县| 公安县| 南和县| 喜德县| 偏关县| 东莞市| 秀山| 文登市| 金堂县| 甘孜| 二手房| 海林市| 紫金县| 广丰县| 古蔺县| 兴山县| 鄂托克旗| 凯里市| 凤台县| 辽源市| 乌鲁木齐市| 胶南市| 五大连池市| 长岭县| 恩施市|