2010-09-30 59 views
4

我使用「top」(linux)顯示90%的CPU峯值時,MYSQL有一個很高的CPU問題。高CPU - 怎麼辦

我試圖找到問題的根源,打開通用日誌和慢查詢日誌, 緩慢的查詢日誌沒有找到任何東西。

該Db包含幾個小表和一個包含近100k行的大表,數據庫引擎是MyIsam。奇怪的事情,我已經注意到,在大桌上,選擇,插入速度非常快,但更新需要0.2 - 0.5秒。

已經使用優化和修復,沒有改進。

表正在被頻繁更新,這可能是高CPU%的來源嗎?

我該怎麼做才能改善這一點?

+5

http://serverfault.com/是最好的地方。 – Ruel 2010-09-30 01:04:51

回答

0

首先,你可以定義哪些是超載服務器的查詢?在這種情況下,請把它粘貼在這裏,也許我們可以幫助你。 另外,請看錶結構。具有許多索引的表可能具有較慢的更新時間跨度。 我也建議你給我們更多關於這個問題的數據。

希望幫助,

0

彈出進入腦海的第一件事就是索引,但不適合,因爲你的選擇和插入的速度快。它通常是插入和更新,會在「過度索引」的表格上變慢。這留下觸發器......你有一個更新觸發器,可能會做很多工作,並導致穗?

+0

我在這張桌子上沒有任何觸發器,只有1個索引 – 2010-09-30 01:42:27

0

一個需要0.5秒的查詢不會在100%的頂部cpu中顯示。太小了。 也嘗試「顯示完整進程列表」;驗證你的my.cnf,甚至嘗試減少查詢超時。慢查詢日誌可以捕捉足夠慢的任何事情。

+0

是的,但是這個表格正在被非常頻繁地更新,可能會比每秒幾次 – 2010-09-30 01:43:28

0

基於表的密鑰,該表上的任何更新語句都很慢。 例如UPDATE客戶SET CustMoney = 1 WHERE CustUID =「someid」

CREATE TABLE IF NOT EXISTS `customers` (
    `CustFullName` varchar(45) NOT NULL, 
    `CustPassword` varchar(45) NOT NULL, 
    `CustEmail` varchar(128) NOT NULL, 
    `SocialNetworkId` tinyint(4) NOT NULL, 
    `CustUID` varchar(64) character set ascii NOT NULL, 
    `CustMoney` bigint(20) NOT NULL default '0', 
    `LastIpAddress` varchar(45) character set ascii NOT NULL, 
    `LastLoginTime` datetime NOT NULL default '1900-10-10 10:10:10', 
    `SmallPicURL` varchar(120) character set ascii default '', 
    `LargePicURL` varchar(120) character set ascii default '', 
    `LuckyChips` int(10) unsigned NOT NULL default '0', 
    `AccountCreationTime` datetime NOT NULL default '2009-11-11 11:11:11', 
    `AccountStatus` tinyint(4) NOT NULL default '1', 
    `CustLevel` int(11) NOT NULL default '0', 
    `City` varchar(32) NOT NULL default '', 
    `State` varchar(32) NOT NULL default '0', 
    `Country` varchar(32) NOT NULL default '', 
    `Zip` varchar(16) character set ascii NOT NULL, 
    `CustExp` bigint(20) NOT NULL default '0', 
    PRIMARY KEY (`CustUID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

再次林不知道這是對CPU佔用率過高的原因,但在我看來,它的不正常的更新語句需要那麼長時間。 (0.5秒)

該表格目前正在更新至多5次,並且在將來會更新更頻繁。

0

這是什麼樣的服務器?我已經看到斯諾勞寫和虛擬機上相對較快的讀取。 http://en.wikipedia.org/wiki/Hdparm必須說什麼? 你有什麼cpu/ram?什麼是平均負載?

1

你的MySQL服務器上有神經節設置嗎?經常神經節指標以及神經節的mysql_stats插件可能會揭示發生了什麼。