Sqlserver2016啟用了日誌並行,但是實際上某些資料庫日誌並行並沒有生效的問題
https://docs.microsoft.com/en-us/archive/blogs/sql_server_team/sql-server-20162017-availability-group-secondary-replica-redo-model-and-performance
sqlserver2016預設啟動並行
禁用並行2種方法
1、DBCC TRACEON (3459, -1),不用重啟sqlserver服務
2、-T 3459引數加入sqlserver啟動引數
禁用序列再啟用並行,必須重啟sqlserver
如果有-T 3459引數,則移除該引數,再重啟sqlserver
如果是DBCC TRACEON (3459, -1), 則直接重啟sqlserver
現象:wondadb3上有20來個資料庫做了AG到dbprod126,dbprod126只有24個CPU,發現wondadb3.wondb到dbprod126.wondb的AG傳輸很慢,把所有資料庫移出AG,再重新加入,加入的過程中第一個先加入wondb,在加入其它所有資料庫,發現wondadb3.wondb到dbprod126.wondb的AG傳輸快了很多,發現sqlserver2016的並行設計上有缺陷,資料庫數量一多,排後面的幾個資料庫就只能預設使用序列
官方文件的解釋:
Parallel redo thread usage is well covered in "Thread usage by Availability Groups" here.
A SQL Server instance uses up to 100 threads for parallel redo for secondary replicas. Each database uses up to one-half of the total number of CPU cores, but not more than 16 threads per database. If the total number of required threads for a single instance exceeds 100, SQL Server uses a single redo thread for every remaining database.
When the host server has 32 or more CPU cores, each database will occupy 16 parallel redo worker threads and one helper worker thread. It means that all databases starting with the 7th database (ordered by database id ascending) that has joined availability group it will be in single thread redo or serial redo irrespective which database has actual redo workload. If a SQL Server Instance has a number of databases, and it is desired for a particular database to run under parallel redo model, the database creation order needs to be considered. Same idea can be
applied to force a database always runs in serial redo model as well. Again, in SQL Server instance level, the way to switch between parallel redo and serial redo is the TF 3459. All databases in the same SQL Server instance will be switched together. Also, to switch from serial redo to parallel redo by disable TF 3459, a SQL Server service restart is required
一個資料庫最高併發執行緒數量的計算
一個AG從節點例項最多有100個並行的redo重做執行緒,但是每個資料庫最多隻有一半的cpu資料的執行緒,但是最多又不能超過16個,假如一臺伺服器24個cpu,20個資料庫加入了AG,則使用每個資料庫的最多不能超過8(100/12=8)
實踐得出結論
1、此處的加入AG的順序,不是代表資料第一次加進AG的順序,而是資料庫啟動後資料庫加進AG的順序。
假如10個庫,名稱分別是1-10,1開始1號庫是用上了並行,但是1號庫產生的日誌特別大,某天突然從庫重啟後,從庫上的1號庫要花很長時間來恢復無法及時進入Synchronizing狀態,這個時候其他資料庫正常恢復完了馬上進入了Synchronizing,1號庫又排在後面用不上並行
2、一個庫同步很慢,沒有用上並行,而且同步佇列還有100GB待同步,同步速度只有50M每秒,還需要1小時才能同步完,這個時候可以在主節點把其他庫包括它自己都移出AG,移除後,從節點看到已經同步完的資料庫的的狀態是restoring,沒有同步完的資料庫的狀態會是not Synchronizing,等1小時候not Synchronizing變成restoring後,再新增進AG,新增的過程會很快,且這個庫的狀態會是(Initializing/In recovery),但是在not Synchronizing到restoring這1小時期間主節點生成的日誌需要同步到從節點,這1小時期間生成的日誌需要30分鐘才能同步到從節點,但是此時因為這個庫以第一的順序加入了AG,使用了並行,比如並行度為8,這個(Initializing/In recovery)也會很快完成,只需要4分鐘(30分鐘/8)左右就能完成
3、檢視一個AG庫有沒有用上並行,查詢sys.sysprocesses該庫對應的cmd自動是否為"PARALLEL REDO TA"即可,為"PARALLEL REDO TA",說明用上了並行
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2757107/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- zabbix客戶端無法啟動並且沒有日誌客戶端
- Oralce資料庫關閉歸檔日誌並且刪除歸檔日誌資料庫
- C++遍歷日誌log目錄,並提取資料進行分析C++
- 安全開發Java:日誌注入,並沒那麼簡單Java
- (OAF)jdeveloper整合log4j並將日誌輸出到指定檔案並寫入資料庫Developer資料庫
- nginx檢視實時日誌並設簡單的訪問驗證Nginx
- 利用 Spring 與 Log4J 巧妙地進行動態日誌配置切換並立即生效Spring
- 如何使用Journalctl檢視並操作Systemd日誌
- logstash監控海量日誌並報警
- ELK 5.0.1+Filebeat5.0.1實時監控MongoDB日誌並使用正則解析mongodb日誌MongoDB
- 請問 Lumen 6.0 是怎樣自定義日誌路徑,並且日誌按天儲存的?
- SQL調優日記:並行等待的原理和問題排查SQL並行
- Docker安裝ELK並實現JSON格式日誌分析DockerJSON
- python多程式檢查埠並寫日誌Python
- LLM並行訓練3-資料並行並行
- 使用Speedment實現並行資料庫流並行資料庫
- Oracle中的並行系列(二):你設定的並行真的生效了嗎?Oracle並行
- 如何利用NLog輸出結構化日誌,並在Kibana優雅分析日誌?
- 從零開始實現放置遊戲(五)——實現掛機戰鬥(3)引入日誌功能並實現切面日誌遊戲
- DG沒有應用日誌應用日誌
- 多執行緒 日誌 和截圖的問題執行緒
- MySQL資料庫中的日誌檔案---(1)錯誤日誌MySql資料庫
- 刪除事務日誌檔案並不安全WC
- Springboot簡單功能示例-6 使用加密資料來源並配置日誌Spring Boot加密
- AOP行為日誌
- find 命令刪除冗餘 Nginx 錯誤日誌並實現備份Nginx
- 開啟關閉oracle資料庫附加日誌Oracle資料庫
- MySQL資料庫中的日誌檔案---(3)慢查詢日誌MySql資料庫
- MySQL資料庫中的日誌檔案---(2)普通查詢日誌MySql資料庫
- 檢視mysql日誌及日誌編碼問題MySql
- 530並行日:用超算更省心並行
- linux伺服器部署SpringBoot專案並檢視專案執行日誌Linux伺服器Spring Boot
- Oracle資料庫並行機制Parallel ExecutionOracle資料庫並行Parallel
- SQLServer資料庫日誌清理 清除sqlserver2005日誌SQLServer資料庫
- 【YashanDB知識庫】windows配置ODBC跟蹤日誌, 使用日誌定位問題Windows
- Oracle並行操作——並行DML操作Oracle並行
- Oracle資料庫重做日誌及歸檔日誌的工作原理說明Oracle資料庫
- Oracle寫日誌問題Oracle