好多初級DBA很喜歡用reuildonline重建索引,他們認為這樣做不會影響業務。
曾經發生的幾次故障,在業務用的時候,rebuild online索引,導致大部分業務無法使用,數據庫hang.
其實rebulid 索引很簡單
drop index index_name
Alter indexindex_name rebuild;
Alter indexindex_name rebuild online;
作為DBA,對生產系統執行任何操作時,僅僅懂這些還是遠遠不夠的,需要明確如下幾點
1、執行該命令會對業務有啥影響,是不是業務時間,如果是一定不要進行類此操作。因為在大對象中創建索引時不僅需要較大temp表空間,而且是DDL操作,基于表原有索引SQL語句的執行計劃都會發生變化,導致大量的解析導致消耗大量的cpu資源。
2、如果刪除或者索引失效后,會出現大量的全表掃描。這不僅對系統I/O產生壓力,對CPU、內存方面壓力也大。
3.要理解rebuild和rebuildonline 的區別。
alter index rebuild online實質上是掃描表而不是掃描現有的索引塊來實現索引的重建.
alter index rebuild 只掃描現有的索引塊來實現索引的重建。
rebuild index online在執行期間不會阻塞DML操作,但在開始和結束階段,需要請求模式為4的TM鎖。因此,如果在rebuild indexonline開始前或結束時,有其它長時間的事物在運行,很有可能就造成大量的鎖等待。也就是說在執行前仍會產生阻塞,應該避免排他鎖.如果在業務期間做,可能會導致 online執行很長時間,在 rebulid index online 的時候走的是 full table scan,這時候需要排序,消耗大量的temp空間,rebuild online需要2倍的索引空間。
而rebuild index在執行期間會阻塞DML操作, 但速度較快,rebulidindex 走的index ffs,而ffs搜索的順序是根據leaf block的物理存儲順序相關,也需要排序。也會消耗大量的臨時表空間。
總之不要在業務期間進行DDL(rebulid 及rebulid online index),或者使用DROP INDEX creat index 來代替rebuild index。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。