[AlwaysOn Availability Groups]排查:AG超過RPO

[AlwaysOn Availability Groups]排查:AG超過RPO

排查:AG超過RPO

在異步提交的secondary上執行了切換,你可能會發現數據的丟失大于RPO,或者在計算可以忍受的數據都是超過了RPO

1.通常原因

1.網絡延遲太高,網絡吞吐量太低,導致Primary的日志堆積
2.磁盤IO瓶頸導致LOG固化速度降低

2. 網絡延遲太高,網絡吞吐量太低,導致Primary的日志堆積

很多超過RPO的原因是日志發送到secondary副本不夠快。

原因:
Primary副本在日志發送啟動了流量控制,因為日志發送超過了最大運行的非通知信息的量。直到這些信息被通知,不然不能在發新的信息到secondary副本。因為數據丟失會影響secondary副本的固化。這些沒有發送的日志的數據就會被丟失。

診斷和解決:
日志高度重復,說明primarysecondary上的延遲很高。可以查看DMVlog_send_rate和性能指標log bytes flushed/sec對比。如果flushed速度大于發送的速度,那么數據丟失會越來越大。
通過檢查性能指標,SQL Server:Availability Replica> Flow Control Time(ms/sec)SQL Server:Availability Replica > Flow Comtrol/sec。這2個性能指標可以說明上一秒有多少時間用來等待flow control清理。Flow control等待越久,發送速度越小。
以下是一組指標可以用來診斷網絡延遲和吞吐量,也可以用一些Windows工具,比如pingResource Monitor, Network Monitor?

·? DMV?sys.dm_hadr_database_replica_states, log_send_queue_size

·? DMV?sys.dm_hadr_database_replica_states, log_send_rate

·? Performance counter?SQL Server:Database > Log Bytes Flushed/sec

·? Performance counter?SQL Server:Database Mirroring > Send/Receive Ack Time

·? Performance counter?SQL Server:Availability Replica > Bytes Sent to Replica/sec

·? Performance counter?SQL Server:Availability Replica > Bytes Sent to Transport/sec

·? Performance counter?SQL Server:Availability Replica > Flow Control Time (ms/sec)

·? Performance counter?SQL Server:Availability Replica > Flow Control/sec

·? Performance counter?SQL Server:Availability Replica > Resent Messages/sec

3.磁盤I/O瓶頸降低secondary副本的日志固化

根據數據庫文件部署,日志固化會因為IO爭用被降低。

原因:
只要日志被固化到磁盤,就可以防止數據丟失。因此隔離日志文件和數據文件的IO變的很重要。如果日志文件和數據文件使用同一個物理磁盤,IO密集型查詢會消耗日志固化需要的IO能力。日志固化變慢會間接導致primary通知變慢,導致flow control等待時間變長。

診斷和解決:
如果你診斷了網絡,沒有很高的延遲或者很低的吞吐量,然后你應該看看secondary是否有IO爭用問題。
以下腳本可以讓你知道每個數據文件和日志文件的讀寫次數。
SELECT DB_NAME(database_id) AS

?? [Database Name] ,

?? file_id ,

?? io_stall_read_ms ,

?? num_of_reads ,

?? CAST(io_stall_read_ms /( 1.0 + num_of_reads ) AS NUMERIC(10, 1)) AS [avg_read_stall_ms] ,

?? io_stall_write_ms ,

?? num_of_writes ,

?? CAST(io_stall_write_ms /( 1.0 + num_of_writes ) AS NUMERIC(10, 1)) AS [avg_write_stall_ms] ,

?? io_stall_read_ms + io_stall_write_ms AS [io_stalls] ,

?? num_of_reads + num_of_writes AS [total_io] ,

?? CAST(( io_stall_read_ms + io_stall_write_ms ) /( 1.0 + num_of_reads

+ num_of_writes) AS NUMERIC(10,1)) AS [avg_io_stall_ms]

FROM sys.dm_io_virtual_file_stats(NULL, NULL)

WHERE DB_NAME(database_id) IN(SELECT DISTINCT database_name FROM sys.dm_hadr_database_replica_cluster_states)

ORDER BY avg_io_stall_ms DESC;


下面腳本提供了某個時間點IO請求被掛起的快照:
SELECT DB_NAME(mf.database_id) AS [Database] ,

?? mf.physical_name ,

?? r.io_pending ,

?? r.io_pending_ms_ticks ,

?? r.io_type ,

?? fs.num_of_reads ,

?? fs.num_of_writes

FROM sys.dm_io_pending_io_requests AS r

INNER JOIN sys.dm_io_virtual_file_stats(NULL, NULL) AS fs ON r.io_handle = fs.file_handle

INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id

AND fs.file_id = mf.file_id

ORDER BY r.io_pending , r.io_pending_ms_ticks DESC;

你可以通過讀寫IO,來識別是否有IO爭用問題。以下是一些關于IO的性能指標:
·? Physical Disk: all counters

·? Physical Disk: Avg. Disk sec/Transfer

·? SQL Server: Databases > Log Flush Wait Time

·? SQL Server: Databases > Log Flush Waits/sec

·? SQL Server: Databases > Log Pool Disk Reads/sec

如果你發現有IO瓶頸,并且log文件和數據文件在同一個磁盤下,第一件要做的事情就是把日志文件和數據文件分開。

?

posted on 2015-11-20 17:20 Fanr_Zh 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/Amaranthus/p/4981484.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374114.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

那些年困擾我們的Linux 的蠕蟲、病毒和木馬

雖然針對Linux的惡意軟件并不像針對Windows乃至OS X那樣普遍,但是近些年來,Linux面臨的安全威脅卻變得越來越多、越來越嚴重。個中原因包括,手機爆炸性的普及意味著基于Linux的安卓成為惡意黑 客最具吸引力的目標之一,以及使用Lin…

python單元測試框架unittest介紹和使用_Python+Selenium框架設計篇之-簡單介紹unittest單元測試框架...

前面文章已經簡單介紹了一些關于自動化測試框架的介紹,知道了什么是自動化測試框架,主要有哪些特點,基本組成部分等。在繼續介紹框架設計之前,我們先來學習一個工具,叫unittest。unittest是一個單元測試框架&#xff0…

使用PowerMock模擬靜態方法

在最近的博客中,我試圖強調使用依賴注入的好處,并表達一種想法,即這種技術的主要好處之一是,通過在類之間提供高度的隔離,它可以使您更輕松地測試代碼,并且得出的結論是,許多好的測試等于好的代…

多態之向上轉型

//向上轉型,子類引用指向父類對象 public class UpcastingDemo{ public static void main(String[] args){ Employee enew Employee(); System.out.println(e.grade); e.job(); e.run(); System.out.println("\n"); Manager mnew Manager(…

(轉)FPGA異步時序和多時鐘模塊

http://bbs.ednchina.com/BLOG_ARTICLE_3019907.HTM 第六章 時鐘域 有一個有趣的現象,眾多數字設計特別是與FPGA設計相關的教科書都特別強調整個設計最好采用唯一的時鐘域。換句話說,只有一個獨立的網絡可以驅動一個設計中所有觸發器的時鐘端口。雖然…

穆里尼奧:與范加爾風格不同,轉變需要時間

據英媒報道,曼聯主帥穆里尼奧近日向媒體表示自己很難繼續遵循前任主帥范加爾的理念去建立球隊,因為他們兩人有著完全不同的想法。 穆里尼奧近日在接受BT Sport的采訪時表示:“這份工作對于我來說最難的地方便是我與范加爾是非常不同的教練&am…

怎么檢測不到我的音頻_Linux 上的最佳音頻編輯工具推薦 | Linux 中國

在 Linux 上,有很多種音頻編輯器可供你選用。不論你是一個專業的音樂制作人,還是只想學學怎么做出超棒的音樂的愛好者,這些強大的音頻編輯器都是很有用的工具。-- Ankush Das(作者)在 Linux 上,有很多種音頻編輯器可供你選用。不論…

具有GlassFish和一致性的高性能JPA –第3部分

在我的四部分系列的第三部分中,我將解釋將Coherence與EclipseLink和GlassFish結合使用的第二種策略。 這就是通過EclipseLink使用Coherence作為二級緩存(L2)的全部內容。 一般的做法 這種方法將Coherence數據網格應用于依賴于無法完全預加載到…

接口使用時注意

interface Service{ void doSome(); //方法的默認修飾符為public abstract } public class InterfaceNote implements Service{ //方法默認的修飾符為 default void doSome(){ System.out.println("做一些服務!"); } public static void main(String…

【Hexo】deploy出錯的解決方法

1、ERROR Deployer not found: git 執行npm install hexo-deployer-git --save 2、$ hexo d INFO Deploying: git INFO Clearing .deploy_git folder... INFO Copying files from public folder... fatal: Not a git repository (or any of the parent directories): .git F…

精選30道Java筆試題解答(轉)

都是一些非常非常基礎的題,是我最近參加各大IT公司筆試后靠記憶記下來的,經過整理獻給與我一樣參加各大IT校園招聘的同學們,純考Java基礎功底, 老手們就不用進來了,免得笑話我們這些未出校門的孩紙們,但是I…

list取值_Redis中List及quicklist實現-2

上一篇中看了List的使用方式、quicklist中的各個結構體,這一篇來看看quicklist里面的幾個核心函數,quicklistCreate函數、quicklistCreateNode函數、quicklistPush函數、quicklistPop函數。接下來我們通過源碼看一下quicklist中是如何借鑒STL中deque的這…

通過示例休眠–第1部分(刪除孤兒)

所以我想做一系列的冬眠例子,展示冬眠的各種特征。 在第一部分中,我想展示有關刪除孤兒功能及其在故事情節中的使用方法。 因此,讓我們開始:) 先決條件 : 為了嘗試以下示例,您將需要以下提到的JAR文件: …

站長工具--IP地址庫

中國最全的IP地址庫 轉載于:https://www.cnblogs.com/weloveshare/p/5783438.html

String使用注意一

public class StringNote{ public static void main(String[] args){ char[] c{h,e,l,l,o}; String str1new String(c); String str2new String(c); String str3"hello"; //常量池中有 “hello” 字符串,str3和str4分別指向他 String str4"…

Win10手記-IIS部署網站問題解決

最近在自己的Win10電腦上嘗試部署ASP.NET網站時出現了問題,經過多方查找定位到IIS為問題來源。 開始之前 先描述下技術環境: 1.Windows 10 PC 2.Windows 自帶的IIS 7 3.ASP.NET Web API項目網站 4.VS 2015 問題描述 首先我們為PC安裝IIS,按照…

python隨機數生成的方法_python生成隨機數的方法

一、概述python可以通過random包來產生隨機數或者執行一些隨機操作。1. random.seed()給定一個數據作為隨機數種子,和大多數語言一樣,python也可以使用時間來作為隨機數種子。import timetime.seed(time.time())12importtimetime.seed(time.time())2. ra…

Java模塊化方法–模塊,模塊,模塊

我認為每個人都會同意,編寫模塊化應用程序和模塊化通常是一件好事。 但是,從Java和Scala語言以及各種Java / Scala框架來看,對模塊化的支持是怎樣的呢? 有很多不同的方法! 讓我們看看其中的一些。 “保護”以下是指模塊…

CentOS 7 安裝記錄

由于centos6.4版本有點老,所以換到centos7。 1.安裝 CentOS 7.0系統安裝配置圖解教程 2.linux設置網卡開機啟動 實質linux是看一個網卡文件的配置,就是/etc/sysconfig/network-scripts/ifcfg-eth0 (這個文件名看你網卡名稱而異,具體你到該目錄…

String使用注意二

public class StringNote_1{ public void fun(){ for(int i1;i<100;i){ System.out.print(i""); //此語句很耗時間影響性能 } System.out.println("100"); } public void fun1(){ String text""; for(int i1;i<100;i){ …