中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么是SQL Profile

發布時間:2021-11-10 14:18:27 來源:億速云 閱讀:154 作者:iii 欄目:MySQL數據庫

本篇內容主要講解“怎么是SQL Profile”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么是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”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潞西市| 曲阜市| 兰溪市| 新蔡县| 通许县| 望都县| 罗江县| 曲阜市| 浙江省| 琼海市| 宽甸| 资兴市| 扬中市| 万山特区| 宝坻区| 永春县| 剑阁县| 龙陵县| 科尔| 云南省| 万全县| 吴桥县| 宁城县| 奉贤区| 德兴市| 南召县| 黑龙江省| 定安县| 石首市| 闽侯县| 洮南市| 牡丹江市| 河东区| 洛扎县| 商城县| 肥乡县| 中宁县| 建瓯市| 巴里| 吴堡县| 龙海市|