2008-11-06 43 views
12

Tôi đang phát triển một ứng dụng web bằng cách sử dụng Java servlet để truy cập vào db Mysql, làm thế nào tôi có thể nhận được số lượng kết nối đến DB của tôi hiện đang mở?Làm thế nào để đếm các kết nối db mở?

Edit:

tôi đã cố gắng "show processlist", nó chỉ cho tôi: 2.695.159, nhưng đó là không đúng, tôi chỉ đang phát triển dự án mới này, tôi là người duy nhất, không thể có nhiều các quy trình đang chạy, những gì tôi muốn là số lượng người dùng truy cập DB của dự án của tôi, không phải là số lượng tất cả người dùng db, nhưng chỉ những người dùng đã đăng nhập vào cơ sở dữ liệu của tôi chỉ có một bảng.

Trả lời

2

danh sách quy trình hiển thị

9

Bạn có thể sử dụng lệnh MySQL show processlist để nhận số lượng kết nối.

Tuy nhiên, điều đó cũng sẽ hiển thị cho bạn mọi kết nối được thực hiện với cùng một userID đến cơ sở dữ liệu có thể không đến từ servlet của bạn.

Nói chung, tôi khuyên bạn nên sử dụng đối tượng Connection Pool (xem http://java-source.net/open-source/connection-pools) để quản lý kết nối của bạn với máy chủ MySQL. Điều này có thể tăng hiệu suất bằng cách làm cho kết nối DB liên tục, do đó bạn không phải lúc nào cũng có chi phí của kết nối DB mới cho mỗi lần tải trang.

Nếu servlet của bạn cần biết số lượng kết nối thì Hồ bơi kết nối của bạn sẽ đi kèm với một phương pháp cho bạn biết có bao nhiêu kết nối hiện đang hoạt động.

3

tình trạng chương trình như tình trạng toàn cầu hoặc show 'Threads_connected' như 'Threads_connected'

Không chắc về sự khác biệt giữa hai trong một với người sử dụng bối cảnh, và bạn vẫn có thể bị ảnh hưởng từ vấn đề mà bạn sẽ thấy tất cả các kết nối, không chỉ các kết nối từ ứng dụng của bạn.

thậm chí bạn có thể kiểm tra Threads_running để chỉ xem các chuỗi đang chạy (ví dụ: không ngủ).

13

Tùy thuộc vào phiên bản MySQL của bạn, bạn có thể thực hiện một lựa chọn trên

SELECT COUNT(*) FROM information_schema.PROCESSLIST;

và bạn có thể làm một where giữa người sử dụng, cơ sở dữ liệu, và IP máy chủ.

Ví dụ:

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

Bạn chỉ có thể chọn từ Information_Schema.Processlist dữ liệu mà thuộc về bạn. Nó có nghĩa là bạn có thể sử dụng nó để theo dõi CHỈ nếu bạn đăng nhập dưới dạng root, nếu không bạn sẽ thấy các kết nối đến từ người dùng của bạn mà bạn đã đăng nhập.

Nếu bạn muốn SQL giám sát thích hợp, nó sẽ là:

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

Chạy truy vấn sau đây, nó sẽ liệt kê ra tên máy chủ và không. kết nối từ mỗi máy chủ:

Máy chủ SELECT, đếm (máy chủ) FROM information_schema.processlist GROUP BY host;

0

Bạn có thể sử dụng số điện thoại

HIỂN THỊ TOÀN CẦU TỪ CHỐI; hoặc hiển thị trạng thái chung như "Threads_connected";

từ trạng thái Kết nối, bạn có thể tìm ra tổng số kết nối.

0

Bạn cũng có thể đếm kết nối mở bằng chương trình trạng thái từ Threads_connected tên biến như thế này:

SHOW STATUS WHERE variable_name = 'Threads_connected'; 

Hoặc bạn cũng có thể đếm process list trực tiếp từ information_schema.PROCESSLIST như dưới đây:

SELECT COUNT(*) FROM information_schema.PROCESSLIST; 
Các vấn đề liên quan