我正在開發一個使用Java servlet訪問Mysql數據庫的Web應用程序,我如何獲取當前打開的數據庫的連接數?如何計算打開的數據庫連接?
編輯:
我想「SHOW PROCESSLIST」,這表明我:2695159,但這是不正確的,我只是在開發這個新的項目,我是唯一的用戶,可能沒有那麼多進程運行,我想要的是訪問我的項目的數據庫,而不是所有數據庫用戶的數量,但僅登錄到我的數據庫只有一個表的用戶數。
我正在開發一個使用Java servlet訪問Mysql數據庫的Web應用程序,我如何獲取當前打開的數據庫的連接數?如何計算打開的數據庫連接?
編輯:
我想「SHOW PROCESSLIST」,這表明我:2695159,但這是不正確的,我只是在開發這個新的項目,我是唯一的用戶,可能沒有那麼多進程運行,我想要的是訪問我的項目的數據庫,而不是所有數據庫用戶的數量,但僅登錄到我的數據庫只有一個表的用戶數。
SHOW PROCESSLIST
你可以使用MySQL命令show processlist
獲得連接的數量。
但是,這也會顯示任何使用相同的用戶ID到數據庫的連接,這可能不是來自您的servlet。
一般來說,我建議您最好使用連接池對象(請參閱http://java-source.net/open-source/connection-pools)來管理與MySQL服務器的連接。這可以通過使數據庫連接持久化來提高性能,所以每次頁面加載時都不會總是有新的數據庫連接開銷。
如果你的servlet需要知道連接的數量,那麼你的連接池應該有一個方法告訴你當前有多少連接是活動的。
顯示像像「threads_connected的」 或 顯示全球狀態的狀態「threads_connected的」
不知道有關在用戶上下文這兩個之間的區別,你仍然可以從你會看到問題的困擾所有連接,而不僅僅是來自您的應用的連接。
你甚至可以檢查Threads_running,只看到正在運行的線程(例如不睡覺)。
根據您的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%"
只能從Information_Schema.Processlist
選擇屬於你的數據。這意味着如果您以root用戶身份登錄,則只能將其用於監控,否則您將看到來自您登錄的用戶的連接。
如果你想適當的監測SQL,這將是:
SELECT variable_value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE variable_name='threads_connected'
運行以下查詢,它列出了主機名和沒有。來自每個主機的連接:
SELECT host,count(host)FROM information_schema。processlist GROUP BY主機;
你可以用這個
SHOW GLOBAL STATUS; 或 顯示全局狀態,如「Threads_connected」;
從Connections狀態您可以找出連接總數。
您也可以通過計算顯示打開的連接狀態從Threads_connected
變量名是這樣的:
SHOW STATUS WHERE variable_name = 'Threads_connected';
或者你也可以直接從information_schema.PROCESSLIST
計數進程列表如下圖所示:
SELECT COUNT(*) FROM information_schema.PROCESSLIST;