2008-11-06 104 views
12

我正在開發一個使用Java servlet訪問Mysql數據庫的Web應用程序,我如何獲取當前打開的數據庫的連接數?如何計算打開的數據庫連接?

編輯:

我想「SHOW PROCESSLIST」,這表明我:2695159,但這是不正確的,我只是在開發這個新的項目,我是唯一的用戶,可能沒有那麼多進程運行,我想要的是訪問我的項目的數據庫,而不是所有數據庫用戶的數量,但僅登錄到我的數據庫只有一個表的用戶數。

回答

2

SHOW PROCESSLIST

9

你可以使用MySQL命令show processlist獲得連接的數量。

但是,這也會顯示任何使用相同的用戶ID到數據庫的連接,這可能不是來自您的servlet。

一般來說,我建議您最好使用連接池對象(請參閱http://java-source.net/open-source/connection-pools)來管理與MySQL服務器的連接。這可以通過使數據庫連接持久化來提高性能,所以每次頁面加載時都不會總是有新的數據庫連接開銷。

如果你的servlet需要知道連接的數量,那麼你的連接池應該有一個方法告訴你當前有多少連接是活動的。

3

顯示像像「threads_connected的」 或 顯示全球狀態的狀態「threads_connected的」

不知道有關在用戶上下文這兩個之間的區別,你仍然可以從你會看到問題的困擾所有連接,而不僅僅是來自您的應用的連接。

你甚至可以檢查Threads_running,只看到正在運行的線程(例如不睡覺)。

13

根據您的MySQL版本,你可以在

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

進行選擇,你可以做一個where用戶,數據庫,主機IP之間。

例如:

USE information_schema; 
SELECT COUNT(*) FROM PROCESSLIST WHERE db ="mycase" AND HOST LIKE "192.168.11.174%" 
2

只能從Information_Schema.Processlist選擇屬於你的數據。這意味着如果您以root用戶身份登錄,則只能將其用於監控,否則您將看到來自您登錄的用戶的連接。

如果你想適當的監測SQL,這將是:

SELECT variable_value 
FROM INFORMATION_SCHEMA.GLOBAL_STATUS 
WHERE variable_name='threads_connected' 
3

運行以下查詢,它列出了主機名和沒有。來自每個主機的連接:

SELECT host,count(host)FROM information_schema。processlist GROUP BY主機;

0

你可以用這個

SHOW GLOBAL STATUS; 或 顯示全局狀態,如「Threads_connected」;

從Connections狀態您可以找出連接總數。

0

您也可以通過計算顯示打開的連接狀態從Threads_connected變量名是這樣的:

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

或者你也可以直接從information_schema.PROCESSLIST計數進程列表如下圖所示:

SELECT COUNT(*) FROM information_schema.PROCESSLIST; 
相關問題