MySQL 优化脚本(analyze)引起的应用崩溃
早上刚走进公司的门口,快走到办公桌的时候,开发的同事很着急的跟我说:你可来了!我:发生什么事情了?开发同事:XX数据库死掉了!我:特别惊讶!这个库运行的
早上刚走进公司的门口,,快走到办公桌的时候,开发的同事很着急的跟我说:你可来了!
我:SELECT.......
注意红色字体的关键字,官网的解释是:
Flushing tables
The thread is executing FLUSH TABLES and is waiting for all threads to close their tables.
也就是说线程执行刷新表操作并且等待所有的线程关闭他们占用的表。
一个超长执行时间的SQL被发现了,这个SQL大概执行了十几个小时还没有查出结果。
但是这样也不应该回引起flush tables 的问题出现。
kill 掉这个SQL线程之后,慢慢的系统恢复了正常查询的状态。
就这样粗暴的处理完成之后,就看系统各种的日志,开始查找原因,突然想到今天是周末
对呀周末!!
周末会怎样呢?
周末有一个优化脚本任务执行的!
这个优化脚本就是使用analyze去分析每张表,analyze会收集表的统计信息。
会导致mysql检测到对应的table做了修改,必须执行flush操作,close和reopen表
由此可以推断出,是因为那个执行时间超长的SQL在执行过程中,我的优化脚本任务也启动了,对SQL占用的表进行了analyze 那张表就需要被close和reopen。但是SQL写的太烂,一直没有执行完成,也就不能释放对表的占用。以至于后面的SQL就要排队等待。
只要将那个SQL给kill掉就关闭了表,然后续的SQL就重新打开了那个表,正常!
我根据推断做了一个测试,首先手工执行那个烂SQL等待了一会儿没有查出结果的迹象,在这个时候使用analyze table table_name;
show processlit 查看状态,果然如此!截图中红色框部分
实验证明了是analyze引起的问题,但不是主要的问题。
于是和开发商量需要改进SQL进行优化。搞定!
本文出自 “影子骑士” 博客,请务必保留此出处

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

深入解析C語言中static關鍵字的功能和用法在C語言中,static是一種非常重要的關鍵字,它可以被用於函數、變數和資料類型的定義。使用static關鍵字可以改變物件的連結屬性、作用域和生命週期,以下就來詳細解析一下static關鍵字在C語言中的作用和用法。 static變數與函數:在函數內部使用static關鍵字定義的變數稱為靜態變量,它具有全域生命週

在java中可有兩種方式實作多線程,一種是繼承Thread類,一種是實作Runnable介面;Thread類別是在java.lang套件中定義的。一個類別只要繼承了Thread類別同時覆寫了本類別中的run()方法就可以實作多執行緒運算了,但是一個類別只能繼承一個父類,這是此方法的限制。以下看範例:packageorg.thread.demo;classMyThreadextendsThread{privateStringname;publicMyThread(Stringname){super();this

標題:C語言中go是關鍵字嗎?詳細解析在C語言中,"go"並不是一個關鍵字。 C語言的關鍵字是由C標準規定的,用來表示特定的語法結構或功能,在編譯器中有特殊的意義,不能被用來當作標識符或變數名稱。例如,關鍵字"int"表示整數資料型別,"if"表示條件語句等等。如果我們想要驗證在C語言中"go"是否是關鍵字,可以寫一個簡單的程式來測試。下面是一個範例:#inc

PHP中var關鍵字的作用和範例在PHP中,var關鍵字用來聲明一個變數。在先前的PHP版本中,使用var關鍵字是宣告成員變數的慣用方式,現在不再建議使用。然而,在某些情況下,var關鍵字依然會被使用。 var關鍵字主要用於宣告一個局部變量,並且會自動將該變數標記為局部作用域。這意味著該變數僅在當前的程式碼區塊中可見,並且不能在其他函數或程式碼區塊中存取。使用var

使用Java的Thread.start()函數啟動新執行緒在Java中,我們可以使用多執行緒來實作並發執行多個任務。 Java提供了Thread類別來建立和管理執行緒。 Thread類別中的start()函數用於啟動一個新線程,並執行該線程的run()方法中的程式碼。程式碼範例:publicclassMyThreadextendsThread{@Overr

在go語言中,while不是關鍵字,可以用for語句加break來實現while循環的效果,例「for {sum++ if sum>10{break}else{...}}」。 go語言有break、default 、func、select、case、defer、go、map、else、goto、for、if、var等25個關鍵字。

C語言的關鍵字共有32個,根據關鍵字的作用,可分其為資料類型關鍵字、控制語句關鍵字、儲存類型關鍵字和其它關鍵字四類。資料型別關鍵字有12個,包括char、double、float、int等;控制語句關鍵字有12個,包括for、break、if、else、do等;儲存類型關鍵字有4個,包括auto、static 、extern等;其它關鍵字有4個,包括const、sizeof等。

在java中,說到線程,Thread是必不可少的。執行緒是一個比過程更輕的調度執行器。為什麼要使用線程?透過使用線程,可以將作業系統過程中的資源分配和執行調度分開。每個執行緒不僅可以共享過程資源(記憶體位址、檔案I/O等),還可以獨立調度(執行緒是CPU調度的基本單位)。說明1、Thread是製作線程最重要的類,這個字本身也代表線程。 2.Thread類別實作了Runnable介面。實例publicclassThreadDemoextendsThread{publicvoidrun(){for(inti=0
