YourSQLDba低版本的一個Bug的淺析

来源:https://www.cnblogs.com/kerrycode/archive/2020/05/08/12851659.html
-Advertisement-
Play Games

幫人分析解決一個YourSQLDba備份報錯問題,個人覺得有點意思,順手記錄一下分析思路,大體解決思路如下: 首先,找到YourSQLDba作業YourSQLDba_FullBackups_And_Maintenance的報錯郵件或者作業的錯誤日誌信息,檢查YourSQLDba出錯的詳細信息。 YO... ...


幫人分析解決一個YourSQLDba備份報錯問題,個人覺得有點意思,順手記錄一下分析思路,大體解決思路如下:

 

首先,找到YourSQLDba作業YourSQLDba_FullBackups_And_Maintenance的報錯郵件或者作業的錯誤日誌信息,檢查YourSQLDba出錯的詳細信息。

 

YOURSQLDBA.MAINT.ShowHistoryErrors 96

 

發現YourSQLDba在更新統計信息是遇到錯誤,如下所示

 

<Exec>
  <ctx>yMaint.UpdateStats</ctx>
  <inf>update statistics selected</inf>
  <cmd>update statistics [model].[dbo].[ServiceBrokerQueue] WITH sample 100 PERCENT</cmd>
  <err>Error 2706, Severity 16, level 6 : Table 'ServiceBrokerQueue' does not exist.</err>
</Exec>

 

 

檢查發現這個對象是queue,根本不是表,所以更新統計信息會出錯。

 

clip_image001

 

那麼YourSQLDba怎麼會更新queue對象的統計信息呢?我首先檢查了一下YourSQLDba的版本信息。當前資料庫伺服器上的YourSQLDba是相當老的一個版本了。然後我就去檢查YourSQLDba的代碼

 

 

Exec YourSQLDba.Install.PrintVersionInfo
 
========================================
 
YourSQLDba version: 5.0.2 2012-06-12

 

YourSQLDba更新統計信息是通過[yMaint].[UpdateStats]來更新統計,於是檢查代碼,發現獲取要更新統計信息的對象是通過下麵腳本獲取的。首先將要更新統計信息的對象放到臨時表#TableNames中去,然後生成更新統計信息的腳本。

 

-- makes query boilerplate with replacable parameter identified by
-- labels between '<' et '>'
-- this query select table for which to perform update statistics
truncate table #TableNames
set @sql =
'
 set nocount on
 ;With
   TableSizeStats as
 (
 select 
   object_schema_name(Ps.object_id, db_id('<DbName>')) as scn --collate <srvCol>
 , object_name(Ps.object_id, db_id('<DbName>')) as tb --collate <srvCol>
 , Sum(Ps.Page_count) as Pg
From
  sys.dm_db_index_physical_stats (db_id('<DbName>'), NULL, NULL, NULL, 'LIMITED') Ps
Group by 
  Ps.object_id  
)
Insert into #tableNames (scn, tb, seq, sampling)
Select 
  scn
, tb
, row_number() over (order by scn, tb) as seq
, Case 
    When pg > 200001 Then '10'
    When Pg between 50001 and 200000 Then '20'
    When Pg between 5001 and 50000 Then '30'
    else '100'
  End  
From 
  TableSizeStats
where (abs(checksum(tb)) % <SpreadUpdStatRun>) = <seqStatNow>

 

這個腳本會將queue類型的對象也放入臨時表,所以明顯是個Bug,不過YourSQLDba後續的版本已經Fix掉這個Bug了。如下所示,後續的版本就加上條件過濾了,只獲取表和視圖的數據。所以遇到這個問題,只需要升級YourSQLDba的版本就好了

 

 

   

-- makes query boilerplate with replacable parameter identified by
-- labels between "<" et ">"
-- this query select table for which to perform update statistics
truncate table #TableNames
set @sql =
'
 Use [<DbName>]
 set nocount on
 ;With
   TableSizeStats as
 (
 select 
   object_schema_name(Ps.object_id) as scn --collate <srvCol>
 , object_name(Ps.object_id) as tb --collate <srvCol>
 , Sum(Ps.Page_count) as Pg
From
  sys.dm_db_index_physical_stats (db_id("<DbName>"), NULL, NULL, NULL, "LIMITED") Ps
Where (   OBJECTPROPERTYEX ( Ps.object_id , "IsTable" ) = 1
       Or OBJECTPROPERTYEX ( Ps.object_id , "IsView" ) = 1)
Group by 
  Ps.object_id  
)
Insert into #tableNames (scn, tb, seq, sampling)
Select 
  scn
, tb
, row_number() over (order by scn, tb) as seq
, Case 
    When Pg > 5000001 Then "0"
    When Pg between 1000001 and 5000000 Then "1"
    When Pg between 500001 and 1000000 Then "5"
    When pg between 200001 and 500000 Then "10"
    When Pg between 50001 and 200000 Then "20"
    When Pg between 5001 and 50000 Then "30"
    else "100"
  End  
From 
  TableSizeStats
where scn is not null and tb is not null and (abs(checksum(tb)) % <SpreadUpdStatRun>) = <seqStatNow>


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [TOC] 前言 1.備份數據的意義 運維工作的核心簡單概括起來就是兩件事:第一個是保護公司的數據,第二個是讓網站能夠7 24小時提供服務。 雖然這兩件事情都很重要,但是相比較而言,丟失一部分數據和讓網站7 24小時提供服務,哪個更重要呢? 對於絕大多數企業來講,失去數據就相當於失去商機,失去產品, ...
  • 2020 5/9 十九、分頁查詢 應用場景:當要顯示的數據,一頁顯示不全,需要分頁提交sql請求 語法:(執行順序已標出) SELECT 查詢列表 ⑦每執行一步都會生成一個虛擬的結果集 FROM 表名 ① [join type join 表2 ② on 連接條件 ③ where 篩選條件 ④ gro ...
  • 十一、mysql 備份恢復 課程大綱 運維工作的核心簡單概括就兩件事: 第一個是保護公司的數據。 第二個是讓網站能7 24小時提供服務(用戶體驗)。 1、備份的類型 冷備份:關閉數據、停止業務 溫備份:枷鎖備份 熱備份:線上備份,不會影響業務。 2、備份方式 邏輯備份: 基於sql語句的備份: ①m ...
  • 十、mysql日誌管理 課程大綱 1、日誌的類型簡介 mysql show variables like '%log_error%';在配置文件中指定錯誤日誌位置。 mysql show variables like '%gen%'; 一般日誌查詢 二進位日誌,記錄修改記錄。 | 日誌文件 | 選項 ...
  • 九、mysql 存儲引擎 1、課程大綱 2、mysql存儲引擎介紹 3、mysql存儲引擎種類 4、資料庫的存儲引擎 存儲引擎查詢 存儲引擎的配置: 配置存儲引擎: 5、innodb體繫結構: 表空間: 共用表空間:主要存放系統元數據 獨立表空間:主要存放用戶數據 邏輯概念,數據存儲的概念 表空間數 ...
  • 八、mysql 基礎優化 索引管理 1、課程大綱 索引介紹 索引管理 2、執行計劃獲取及分析 mysql mysql資料庫中索引的類型介紹 BTREE:B+樹索引 (主要) HASH:HASH索引 FULLTEXT:全文索引 RTREE:R樹索引 索引管理: 索引建立的在表的列上(欄位)的。 在wh ...
  • 七、MySQL 客戶端工具及SQL入門 1、課程大綱: mysql客戶端命令介紹; mysql獲取幫助的方法細講; DDL語句之管理資料庫; DDL語句之管理表與案例介紹; DML語句之管理表中的數據; SELECT 檢索數據; 2、mysql介面程式使用及SQL入門 2、伺服器端命令(SQL) ( ...
  • 1、官網 https://www.navicat.com.cn/ 2、安裝教程(厚著臉皮,貼上大佬教程) Navicat15安裝教程: https://www.cnblogs.com/xuexianqi/p/12797170.html ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...