国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Oracle2PG系列之檢查點引起的故障案例

IT那活兒 / 1868人閱讀
Oracle2PG系列之檢查點引起的故障案例
點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!! 

1

最近碰到個案例,某Oracle數據庫遷移到PG的過程中,壓測發現一波巨量IO將PG庫給沖hang住了,一通檢查發現是PG全量檢查點搗的鬼,今天我們一起來總結一下。

2

先普及一下基礎知識,一般數據庫的最小存儲單元都是數據塊(block/page),當客戶端修改數據時意味著,數據庫引擎需要將對應的物理數據塊讀到數據庫的buffer cache中進行修改,此時這個數據塊與物理文件中的數據塊將不在一致,稱為臟塊。
由于臟塊分布隨機,持久化到存儲的成本巨大,讓客戶端等待這個臟塊完成持久化完成無疑TPS會非常差。
為了改進這個問題各大數據庫廠商普遍采用預寫式(write ahead log,也有取名redo,都是一個意思)來記錄這些臟塊的修改動作(record),將這些record持續性順序的持久化到磁盤,臟塊將在后續異步持久化到存儲中。
傳統HDD順序IO的性能優于隨機IO幾十倍,這即保證了數據修改不會丟失,性能也得到得了巨大提升。
參考oracle文檔圖:
需要注意:當臟塊持久化不及時,buffer cache中堆積了巨量臟塊時,如果發生宕機,數據庫再次啟動時為了維持一致性,需要調用wal的record來恢復這些臟塊。這就需要數據庫判斷哪些是臟塊,通常數據庫廠商采用檢查點(checkpoint)點來進行標記。
Buffer cache中的臟塊持久化到數據文件中后,將標記上checkpoint position,并與wal record進行關聯,position之前的wal將不再需要,position之后的wal record用來對臟塊進行一致性恢復。
參考oracle文檔圖:
注意:在Oracle中,其采用SCN來記錄Checkpoint position。
Oracle在古老的8i版本之前,采用一次性將buffer cache中的臟塊全量持久化到數據文件中并更新checkpoint position,稱為全量檢查點(full checkpoint)。這種方法比較簡單粗暴,產生的問題也很直觀,當產生全量檢查點時,巨量的臟塊持久化IO會對數據庫TPS產生劇烈影響,甚至于hang、宕機等、問題多多。
Oracle針對這個問題后續采用了增量檢查點(Incremental checkpoint),在buffer cache中對臟塊按順序進行鏈表記錄,增量檢查點按鏈表持續推進position,數據庫實例異常宕機時,僅需對最新position之后的臟塊使用wal record進行一致性恢復,這會大大縮短恢復時間,且將全量檢查點的巨量臟塊持久化IO進行平滑拆分提高數據庫穩定性,同時提供了Fast Mtrr等參數進一步幫助用戶來控制一致性恢復時間。
以上我們就搞清了Oracle檢查點相關的知識。

3

接下來就來探討PG的檢查點:
PG的文檔中描述其在發生檢查點時,需要將全量臟塊刷新到磁盤中,且提到會引起IO過載的問題。注意PG目前的版本中還不支持增量檢查點。
再來看一下模擬壓測故障的案例:使用pgbench進行TPS壓力測試,發現在開始checkpoint后, iostat中write開始劇烈上升,同時pgbench的TPS直線下降,數據庫基本無響應。
如下:
pg checkpointlog:
注意:這里為了加大全量檢查點的力度設置檢查點周期為1分鐘。
檢查點期間iostat中磁盤寫壓力較大,IO響應出現延遲。
同時pidstat觀察到postgres walwrite進程的io在checkpoint發起后直線下降。由于事務wal日志落盤不及時大量的會話等待于WALWriteLock,數據庫hang。
以上就復現了生產壓測時的故障現象。
針對于此,PG建議通過設置checkpoint_timeout與max_wal_size來控制檢查點的周期,同時設置checkpoint_completion_target來控制檢查點周期間,刷臟的負荷。
具體如下:

根據如上優化后,生產環境經過多輪壓測調整,TPS穩定運行24小時,基本達到理想效果。

4

最后我們總結一下, Oracle中有詳細的lgwr日志、ckpt日志、dbwr日志等等便于我們排查問題,而PG的日志信息較少,排查問題相對困難,這方面還有待改進,本文就到此為止。

 



END



  



本文作者:胡 杰

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129530.html

相關文章

  • 無人值守時代,運維如何保障發布質量?

    摘要:導讀阿里巴巴千億交易背后,如何盡量避免發布故障在面對實際運維過程中遇到的問題該如何解決近日,在大會上,阿里巴巴運維技術專家少荃,給我們帶來了解決方案和思路。在阿里,這些屏幕包括監控發布單機器故障預警等。 導讀:阿里巴巴千億交易背后,如何盡量避免發布故障?在面對實際運維過程中遇到的問題該如何解決?近日,在GOPS大會上,阿里巴巴運維技術專家少荃,給我們帶來了解決方案和思路。 showIm...

    Yu_Huang 評論0 收藏0
  • 無人值守時代,運維如何保障發布質量?

    摘要:摘要阿里巴巴千億交易背后,如何盡量避免發布故障在面對實際運維過程中遇到的問題該如何解決阿里巴巴運維技術專家少荃,給我們帶來了解決方案和思路。在阿里,這些屏幕包括監控發布單機器故障預警等。無人值守發布無人值守發布主要是把上述過程自動化智能化。 摘要: 阿里巴巴千億交易背后,如何盡量避免發布故障?在面對實際運維過程中遇到的問題該如何解決?阿里巴巴運維技術專家少荃,給我們帶來了解決方案和思路...

    LancerComet 評論0 收藏0
  • [譯]GC專家系列3-GC調優

    摘要:原文鏈接本篇是專家系列的第三篇。但是,請記住調優是不得已時的選擇。縮短耗時的單次執行與相比,耗時有較明顯的增加。創建文件過程中,進程會中斷,因此不要在正常運行時系統上做此操作。因此校驗結果并根據具體的服務需要,決定是否要進行調優。 原文鏈接:http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collecti...

    leap_frog 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<