今日資料庫操作雜談

來源:互聯網
上載者:User

今天遇到了一些關於處理資料庫操作相關的事情,先做一些簡要的總結:

 

昨天老大安排要測試一下資料庫單表中可以插入多少條記錄,為此做了個簡單的網頁來跑這個程式,昨天下班的時候忘記查看記錄,為此導致在同一資料庫的其他項目不能正確拉取資料庫。錯誤的原因很簡單,資料庫所在的磁碟分割已滿,資料庫不滿進行資料庫操作。

       在得到資料庫所在磁碟分割已滿的情況下,首先想到的是要將測試資料刪除掉,我們採取的操作為清表操作,即truncate table document,但是過了一段時間卻沒有卻發現“show processlist”該語句依然在“waiting for table”。此後kill了這條語句,依然發現“waiting for table”。而執行這兩條語句期間“select count(*) from documents ”的結構沒有變。此後一段時間一度想直接刪除資料庫相關的檔案,經與營運的同事一討論發現這是時分愚蠢的做法。

       營運童鞋的提議是刪除一些資料庫所在磁碟分割的一些檔案,然後再進行刪除資料庫的操作。分析了一下該分區下的檔案,竟然發現一程式的記錄檔竟然達到拉31G如此龐大,清空此檔案之後即可進行資料庫的操作。

      

       究其原因,在資料庫操作過程中,資料庫中部分資料需要回寫到磁碟中。在我操作的MySQL所在磁碟中,使用率已經為100%。所以才會出現在沒用鎖表情況下的“waiting for documents”的提示資訊。

 

       總結處理此類問題的方法:

1、  首先要查看mysql的慢日誌記錄,mysql的設定檔通常存放在/etc/my.cnf中,可以根據此檔案找到mysql設定檔的位置;

2、  利用show processlist,查看當前語句的執行狀態,關鍵是查看該語句是否被“Locked”;

3、  分析Locked的原因;

4、  查看MySQL所在磁碟分割的使用方式。

 

       附此次操作中的學習的主要命令:

1、  殺掉MySQL中執行某些語句串連的方式,kill該串連的ID號,類似於殺死進程一樣的方式;

2、  查看系統的分區情況:

3、查看分區下檔案大小的命令

 

 

   

順便也學習了一下關於MySQL鎖的相關概念:

MySQL的鎖並非像Linux中的P/V鎖。如果在Linux中用sem_wait和sem_post進行P/V鎖操作,如果此時發生死結,沒有其他可以選擇的方式,只能由系統的守護來負責解鎖操作。但是在MySQL中的鎖,即使執行該操作的MySQL進程顯示為“Locked”,並非是顯示死結,而是臨時鎖,而是等待前面正在執行的語句執行完畢,釋放該表的時候,此鎖就會解鎖,繼續執行該語句。MySQL就像對所有待執行的語句做了一個等待隊列,在等待隊列中的語句顯示為“Locked”狀態。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.