我有乙個每天晚上執行的批量作業。它將幾十個資料庫中的某些新資料收集到乙個**資料庫(名為「ac」)中,然後與sphinxsearch一起用於自動完成。批量作業及其查詢已執行可靠一年以上。
今天我發現批處理作業卡住了。 mysqld在乙個核心上使用100%的cpu,通常需要5分鐘的查詢在13小時後仍在執行。
dtruss顯示mysqld不斷從查詢中涉及的資料檔案中讀取資料。相關索引全部在mysqld的快取中。沒有磁碟io,因為mysqld只是讀取資料檔案,而且它們被freebsd緩衝在記憶體中。
use wxyz;
create or replace view ac_view as select
j.id as pid, j.parent as ppid,
table_a.name as name_a,
table_d.name as name_d,
table_s.name as name_s
from junction j
inner join table_a on table_a.id=j.aid
inner join table_d on table_d.id=j.did
inner join table_s on table_s.id=j.sid
where s.inserted > '2010-12-21 03:00:00';
insert ignore into ac.ac_schematic
(pid, ppid, aid, did, sid)
select pid, ppid, aid, did, sid
from ac_view v
inner join ac.dict_a a on a.name=v.name_a
inner join ac.dict_d d on d.name=v.name_d
inner join ac.dict_s s on s.name=v.name_s;mysqld正在讀取的檔案是:
ac/ac_schematic.myd (more than anything)
wxyz/junction.myd
wxyz/table_a.myd
wxyz/table_d.myd
wxyz/table_s.myd伺服器版本是5.0.87
這很好奇,我很困惑。查詢無法花費12個小時以上的cpu時間。我敢打賭,我可以讓查詢無限期地與cpu計量器掛鉤。
任何想法,我可以檢查,試圖找出發生了什麼。我有乙個相當不錯的dtrace工具可用。
mysqld與mysql的關係
mysqld是服務,mysql是客戶端。mysqld其實是sql後台程式 也就是mysql伺服器 它是關於伺服器端的乙個程式,mysqld意思是mysql daemon,在後台執行,監聽3306埠,如果你想要使用客戶端程,這個程式必須執行,因為客戶端是通過連線伺服器來訪問資料庫的。你只有啟動了mys...
為什麼會陷入死迴圈
看似簡單的一段程式如下 int main 在unix linux平台下,gcc編譯執行會陷入死迴圈.因為變數 i 和陣列 j 8 是儲存在棧中,預設是由高位址向低位址方向儲存.輸出變數位址可以發現 i 儲存位置在0xbfd90dec,j 0 j 1 j 7 在記憶體的位址分別是0xbfdab05c ...
yum安裝mysql後沒有mysqld
在centos中用命令 yum install mysql安裝資料庫,但裝完後執行mysqld啟動mysql的時候提示找不到,通過 find grep mysqld 也沒找到mysqld的目錄,後來在google上搜尋下,才知道用yum安裝時候mysql也有三個引數的。yum install mys...