mysql 慢日志報警_一則MySQL慢日志監控誤報的問題分析

之前因為各種原因,有些報警沒有引起重視,最近放假馬上排除了一些潛在的人為原因,發現數據庫的慢日志報警有些奇怪,主要表現是慢日志報警不屬實,收到報警的即時通信提醒后,隔一會去數據庫里面去排查,發現慢日志的性能似乎沒有那么差(我設置的一個閾值是60)。

排查過幾次代碼層面的邏輯,沒有發現明顯的問題,幾次下來,問題依舊,這可激發了修正的念頭,決定認真看看到底是什么原因。

3d1df9b60764710746d403a5354bfb15.png

后端使用的是基于ORM的模式,數據都存儲在模型MySQL_slowlog_sql_history對應的表中。

代碼層面是類似如下的邏輯:

MySQL_slowlog_sql_history.objects.filter(create_time__gt='2020-01-29 11:00:00',Query_time_pct_95__gt=60)

傳入的時間是動態的,然后閾值取60秒,按照預期如果報警出來就肯定是有問題的。

為了進一步驗證,我把閾值時間修改為600,竟然還是報出錯誤,執行7~8秒的慢查詢照樣會報出來。

我使用debug的方式得到了ORM解析得到的SQL:

SELECT...`mysql_slowlog_sql_history`.`create_time`, `mysql_slowlog_sql_history`.`memo` FROM `mysql_slowlog_sql_history` WHERE (`mysql_slowlog_sql_history`.`create_time` > '2020-01-29 11:00:00' AND `mysql_slowlog_sql_history`.`Query_time_pct_95` > '600') LIMIT 21; args=(u'2020-01-29 11:00:00', u'600')

看SQL沒問題啊。

我自己在客戶端執行,確實是好好的,只過濾出了600秒以上的結果。

select ip_addr,db_port from mysql_slowlog_sql_history where create_time>'2020-01-29 00:00:00' and Query_time_pct_95 > 600;

對著這個結果我開始反思,到底是什么原因呢?

我看著模型的字段定義開始有所悟,然后快速驗證了一番。

為了方便說明,我創建了一個測試表test_dummy.

create table test_dummy(id int primary key auto_increment,Query_time_pct_95 varchar(100));

初始化幾條數據。

mysql> insert into test_dummy(Query_time_pct_95 ) values('8.83736'),('7.70056'),('5.09871'),('4.32582');

Query OK, 4 rows affected (0.00 sec)

Records: 4 Duplicates: 0 Warnings: 0

mysql> select * from test_dummy;

+----+-------------------+

| id | Query_time_pct_95 |

| 1 | 8.83736 |

| 4 | 7.70056 |

| 7 | 5.09871 |

| 10 | 4.32582 |

4 rows in set (0.00 sec)

然后使用如下的兩條語句來進行對比測試。

mysql> select *from test_dummy where Query_time_pct_95>600;

Empty set (0.00 sec)

mysql> select *from test_dummy where Query_time_pct_95>'600';

| 1 | 8.837364 |

| 2 | 7.700558 |

2 rows in set (0.00 sec)

可以看到,使用了整型數值的時候,沒有返回結果,而使用了字符類型的時候,匹配的結果是按照最左匹配的模式來進行過濾的,也就意味著在數據庫層面對于浮點數的處理還是差別很大的。

所以這個問題的快速修復方式就是在數據庫層面修改數據表的類型為float,而在精度損失方面這塊的影響是可以忽略不計的。

再次驗證,這個問題就沒有再次出現。

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

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

相關文章

用css實現自定義虛線邊框

開發產品功能的時候ui往往會給出虛線邊框的效果圖,于是乎,我們往往第一時間想到的是用css里的border,可是border里一般就提供兩種效果,dashed或者dotted,ui這時就不滿意了,說虛線太密了。廢話不多說&#x…

無限復活服務器,絕地求生無限復活模式怎么玩 無限復活新手教程

相信不少的絕地求生玩家們最近都聽說了其無限復活模式吧?因此肯定想要知道這種模式究竟該怎么玩,所以下面就來為各位帶來此玩法的攻略相關,希望各位在看了如下的內容之后恩呢狗狗了解到新手教程攻略一覽。“War”模式的設定以及玩法規則如下&#xff1a…

lua math.random()

math.random([n [,m]]) 用法:1.無參調用,產生[0, 1)之間的浮點隨機數。 2.一個參數n,產生[1, n]之間的整數。 3.兩個參數,產生[n, m]之間的整數。 math.randomseed(n) 用法:接收一個整數n作為隨即序列的種子。 例&…

零基礎學習ruby_學習Ruby:從零到英雄

零基礎學習ruby“Ruby is simple in appearance, but is very complex inside, just like our human body.” — Matz, creator of the Ruby programming language“ Ruby的外觀很簡單,但是內部卻非常復雜,就像我們的人體一樣。” — Matz ,R…

windows同時啟動多個微信

1、創建mychat.bat文件(文件名任意),輸入以下代碼,其中"C:\Program Files (x86)\Tencent\WeChat\"為微信的安裝路徑。以下示例為同時啟動兩個微信 start/d "C:\Program Files (x86)\Tencent\WeChat\" Wechat.exe start/d "C:\P…

mysql date time year_YEAR、DATE、TIME、DATETIME和TIMESTAMP詳細介紹[MySQL數據類型]

為了方便在數據庫中存儲日期和時間,MySQL提供了表示日期和時間的數據類型,分別是YEAR、DATE、TIME、DATETIME和TIMESTAMP。下面列舉了這些MSL中日期和時間數據類型所對應的字節數、取值范圍、日期格式以及零值。從上圖中可以看出,每種日期和時…

九度oj 題目1380:lucky number

題目描述:每個人有自己的lucky number,小A也一樣。不過他的lucky number定義不一樣。他認為一個序列中某些數出現的次數為n的話,都是他的lucky number。但是,現在這個序列很大,他無法快速找到所有lucky number。既然這…

安裝Tengine

1.安裝VMware2.安裝CentOS6.53.配置網絡a.修改 /etc/sysconfig/network-scripts/ifcfg-eth0配置文件,添加如下內容DEVICEeth0HWADDR00:0C:29:96:01:6BTYPEEthernetUUID41cbd943-024b-4341-ac7a-e4d2142b4938ONBOOTyesNM_CONTROLLEDyesBOOTPROTOnoneIPADDRxxx.xxx.x.xxx#例如:IP…

node seneca_使用Node.js和Seneca編寫國際象棋微服務,第2部分

node seneca處理新需求而無需重構 (Handling new requirements without refactoring) Part 1 of this series talked about defining and calling microservices using Seneca. A handful of services were created to return all legal moves of a lone chess piece on a ches…

【OCR技術系列之八】端到端不定長文本識別CRNN代碼實現

CRNN是OCR領域非常經典且被廣泛使用的識別算法,其理論基礎可以參考我上一篇文章,本文將著重講解CRNN代碼實現過程以及識別效果。 數據處理 利用圖像處理技術我們手工大批量生成文字圖像,一共360萬張圖像樣本,效果如下:…

mysql 修改字段類型死鎖_mysql數據庫死鎖的產生原因及解決辦法

數據庫和操作系統一樣,是一個多用戶使用的共享資源。當多個用戶并發地存取數據 時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。加鎖是實現數據庫并 發控制…

openwrt無盤服務器,搭建基于 OpenWrt/gPXE/iSCSI 的 Windows 無盤工作站

本文要介紹的是如何在 OpenWrt 平臺上面搭建無盤工作站服務器以及 Windows 的 iSCSI 部署。當然,由于 OpenWrt 也可以算得上一種 Linux 發行版了,所以本文所介紹的一些方法,在其它 Linux 發行版上面仍有一定的參考價值。整個過程大概分為以下…

Ralink5350開發環境搭建

一、安裝虛擬機(Oracle VM VirtualBox 或 VMware Workstation) 二、在虛擬機中安裝linux操作系統(當前使用的是Ubuntu1204桌面版) 三、配置linux相關服務 安裝、配置、啟動ftp服務apt-get install vsftpd 改動 vsftpd 的配置文件 /etc/vsftpd.conf,將以…

figma下載_Figma重新構想的團隊庫

figma下載一個新的,功能更強大的界面,用于在整個組織中共享組件 (A new, more powerful interface for sharing Components across your organization) The Team Library in Figma is a set of shared Components across all files in a Team. Component…

boost python導出c++ map_使用Boost生成的Python模塊:與C++簽名不匹配

我正在使用名為Mitsuba的軟件。它附帶了一個用Boost包裝的Python實現。 Python中的這一行:使用Boost生成的Python模塊:與C簽名不匹配scene SceneHandler.loadScene(fileResolver.resolve("model.xml"), paramMap)產生一個錯誤。根據文檔&…

CSU-1982 小M的移動硬盤

CSU-1982 小M的移動硬盤 Description 最近小M買了一個移動硬盤來儲存自己電腦里不常用的文件。但是他把這些文件一股腦丟進移動硬盤后,覺得這些文件似乎沒有被很好地歸類,這樣以后找起來豈不是會非常麻煩? 小M最終決定要把這些文件好好歸類&a…

杜比服務器系統安裝教程,win10杜比音效如何安裝?win10安裝杜比音效的詳細教程...

杜比音效想必大家都不陌生,聽歌或者看電影開啟杜比音效可以給人一種身臨其境的感覺。不少朋友都升級了win10系統卻不知道如何安裝杜比音效?如何為自己的系統安裝杜比音效呢?感興趣的小伙伴請看下面的操作步驟。win10安裝杜比音效的方法&#…

劍指Offer_52_正則表達式匹配

題目描述 請實現一個函數用來匹配包括.和的正則表達式。模式中的字符.表示任意一個字符,而表示它前面的字符可以出現任意次(包含0次)。 在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串"aaa"與…

分布式系統開發注意點_分布式系統注意事項

分布式系統開發注意點by Shubheksha通過Shubheksha 分布式計算概述:分布式系統如何工作 (Distributed Computing in a nutshell: How distributed systems work) This post distills the material presented in the paper titled “A Note on Distributed Systems”…

前端if else_應該記錄的一些項目代碼(前端)

1.共享登錄(單點登錄)主要是前端部分主要是根據是否有cookie來判斷是否已經登錄主系統,然后再根據是否有當前系統的登錄信息來(這塊主要是sessionStorage做的)判斷是否要再登錄當前系統。設置、讀取和設置cookie的方法…