您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何解析Oracle 高水位(HWM)對select性能的影響,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
不知道大家有沒有遇到了應用跟你反饋”我的表里沒有什么數據,可是為什么訪問這么慢呢?請DBA幫忙分析下吧“,然后你去看了這張表確實就那么幾條數據,然后你也select一下,發現確實很慢,然后你問業務人員,他們反饋,在查之前delete了一千萬行數據,然后查詢就慢了。
其實這正是問題的所在,因為他是delete操作,沒有降低HWM的位置,這里就引入了oracle訪問表的數據的方式:oracle會訪問HWM以下的所有的塊,如果你的HWM位置很高了,即便你的HWM下面的所有的塊里面沒幾條數據,可是select依然不會快的,這就是訪問慢的問題所在。
既然發現了問題,那么應該怎么解決這個問題呢?
我們之前講了truncate操作可以把高水位清零。所以要大批量的刪數據的話,如果可以的話,盡量用truncate操作吧。
我們知道在11g之后,我們的段空間管理一般都是自動段空間管理,也就是automatic segment space management,然后assm又引入了低HWM的概念。數據插入到新數據塊的時候,它在沒有被使用的情況下,并沒有格式化這些塊。然后低HWM的概念就是為了標記這些已經被格式化的塊,所以低HWM一定會<=HWM。
那么講了這么多,該怎么來合理的調整HWM的位置呢?
1、執行表重建命令 alter table tt move
alter table tt move tablespace,我們可以把這個表給移動到一個新的表空間。
alter table tt move后面不加參數就是還在原來的表空間,但是會釋放HWM的位置,但是已經分配的空間也是不允許其他段使用的。
2、執行表收縮命令 alter table tt shrink space
需要注意的是在執行之前需要開啟行遷移。也就是需要
alter table tt enable row movement;
然后再收縮表
alter table tt shrink space cascade;
HWM的信息是存儲在段頭塊中的,然后再自動段空間管理的表空間中,是通過bitmap來管理段內空間分配的。
然后oarcle的全表掃描就是讀取高水位HWM標記以下的所有的塊。
關于如何解析Oracle 高水位(HWM)對select性能的影響就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。