Hướng dẫn nodejs mysql connection limit - giới hạn kết nối mysql của nodejs

Code ví dụ Node.js MySQL – Phân trang với LIMIT, OFFSET

(Xem thêm: Tự học Node.js qua ví dụ)

Giả sử bạn đã có sẵn database demo với table customer (id, name, address)

(Xem lại: Code ví dụ node.js tạo database, tạo table)

CREATE DATABASE demo;
CREATE TABLE demo.customer (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255));

và insert sẵn các bản ghi sau:

INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');

Hướng dẫn nodejs mysql connection limit - giới hạn kết nối mysql của nodejs

Câu lệnh SELECT 2 đối tượng customer: "SELECT * FROM customer LIMIT 2"

Hướng dẫn nodejs mysql connection limit - giới hạn kết nối mysql của nodejs

Câu lệnh SELECT 2 đối tượng customer bắt đầu từ vị trí thứ 2: 

INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
0 hoặc 
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
1

Hướng dẫn nodejs mysql connection limit - giới hạn kết nối mysql của nodejs

Khi muốn phân trang (paging) thì ta xác định số phần tử của 1 trang và số phần tử được skip.

Ví dụ 1 trang có 10 phần tử, và muốn query trang thứ 3 thì ta cần skip qua 2 trang đầu tức là skip qua 20 phần tử (OFFSET = 20). Kích thước trang là 10 nên giá trị LIMIT sẽ là 10. Câu lệnh SQL trong ví dụ này sẽ là 

INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
2
Câu lệnh SQL trong ví dụ này sẽ là 
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
2

Code ví dụ Node.js MySQL Paging.

Trong ví dụ này mình sẽ sử dụng database đã tạo bên trên. Thực hiện query 2 bản ghi kể từ bản ghi thứ 2:

(nhớ phải cài module mysql trước nhé

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  port: "3306",
  user: "root",
  password: "admin1234",
  database: "demo"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

var sql = "SELECT * FROM customer LIMIT 2 OFFSET 2";

con.query(sql, function (err, result, fields) {
  if (err) throw err;
  console.log(result);
});

  
con.end(function(err) {
  if (err) throw err;
  console.log("Closed!");
});

Chạy file

INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
3

Hướng dẫn nodejs mysql connection limit - giới hạn kết nối mysql của nodejs

Đôi khi, máy chủ MySQL có thể cung cấp cho quá nhiều thông báo lỗi kết nối khi bạn cố gắng kết nối với cơ sở dữ liệu MySQL. Tại đây, cách thức tăng kết nối tối đa trong MySQL để khắc phục sự cố này.

Nội phân Chính showShow

  • Điều gì gây ra MYSQL quá nhiều kết nối?
  • MySQL có thể xử lý bao nhiêu kết nối?
  • 1. Kiểm tra các kết nối tối đa mặc định
  • 2. Tăng kết nối tối đa
  • 3. Khởi động lại máy chủ MySQL
  • Bài viết liên quan:
  • Số lượng kết nối quá cao
  • Giá trị được đề xuất cho max_connections
  • Có bao nhiêu kết nối MySQL 8 có thể xử lý?
  • Làm thế nào để MySQL xử lý quá nhiều kết nối?
  • DB có thể xử lý bao nhiêu kết nối?
  • MySQL có thể xử lý bao nhiêu yêu cầu?

Điều gì gây ra MYSQL quá nhiều kết nối?

Nếu bạn nhận được thông báo lỗi quá nhiều kết nối, trong khi kết nối với cơ sở dữ liệu MySQL, điều đó có nghĩa là tất cả các kết nối có sẵn đã được sử dụng bởi các máy khách khác nhau và máy chủ MySQL của bạn không thể mở bất kỳ kết nối mới nào cho đến khi bất kỳ kết nối hiện có nào được đóng.

MySQL có thể xử lý bao nhiêu kết nối?

1. Kiểm tra các kết nối tối đa mặc định

2. Tăng kết nối tối đa

1. Kiểm tra các kết nối tối đa mặc định

2. Tăng kết nối tối đa

mysql> show variables like "max_connections";

3. Khởi động lại máy chủ MySQL

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 100   |
+-----------------+-------+

2. Tăng kết nối tối đa

3. Khởi động lại máy chủ MySQL

mysql> set global max_connections = 200;

Bài viết liên quan:

Số lượng kết nối quá cao

$ sudo vi /etc/my.cnf

Giá trị được đề xuất cho max_connections

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $MYSQL_HOME/my.cnf
  • ~/.my.cnf

Có bao nhiêu kết nối MySQL 8 có thể xử lý?

max_connections = 200

Làm thế nào để MySQL xử lý quá nhiều kết nối?

3. Khởi động lại máy chủ MySQL

Bài viết liên quan:

$ sudo service mysql restart

Số lượng kết nối quá cao

Giá trị được đề xuất cho max_connections

Bài viết liên quan:

  • Số lượng kết nối quá cao

Giá trị được đề xuất cho max_connections

Có bao nhiêu kết nối MySQL 8 có thể xử lý?mysqld server, all available connections are in use by other clients.

Làm thế nào để MySQL xử lý quá nhiều kết nối?

DB có thể xử lý bao nhiêu kết nối? actually permits

INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
5 + 1 client connections. The extra connection is reserved for use by accounts that have the
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
8 privilege. By granting the privilege to administrators and not to normal users (who should not need it), an administrator who also has the
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('kai', 'ha noi - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('sena', 'vinh phuc - viet nam');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('iron man', 'new york - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('batman', 'gotham - usa');
INSERT INTO `demo`.`customer` (`name`, `address`) VALUES ('bruce lee', 'hong kong - china');
9 privilege can connect to the server and use
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  port: "3306",
  user: "root",
  password: "admin1234",
  database: "demo"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

var sql = "SELECT * FROM customer LIMIT 2 OFFSET 2";

con.query(sql, function (err, result, fields) {
  if (err) throw err;
  console.log(result);
});

  
con.end(function(err) {
  if (err) throw err;
  console.log("Closed!");
});
0 to diagnose problems even if the maximum number of unprivileged clients are connected. See Section 13.7.5.30, “SHOW PROCESSLIST Statement”.

MySQL có thể xử lý bao nhiêu yêu cầu?


Nếu bạn nhận được thông báo lỗi quá nhiều kết nối, trong khi kết nối với cơ sở dữ liệu MySQL, điều đó có nghĩa là tất cả các kết nối có sẵn đã được sử dụng bởi các máy khách khác nhau và máy chủ MySQL của bạn không thể mở bất kỳ kết nối mới nào cho đến khi bất kỳ kết nối hiện có nào được đóng.

Theo mặc định, MySQL 5.5+ có thể xử lý tối đa 151 kết nối. Số này được lưu trữ trong biến máy chủ được gọi là max_connections. Bạn có thể cập nhật biến Max_Connections để tăng các kết nối được hỗ trợ tối đa trong MySQL, miễn là máy chủ của bạn có đủ RAM để hỗ trợ các kết nối tăng lên.

  • Số lượng kết nối quá cao
  • Giá trị được đề xuất cho max_connections
  • Có bao nhiêu kết nối MySQL 8 có thể xử lý?
  • Làm thế nào để MySQL xử lý quá nhiều kết nối?
  • DB có thể xử lý bao nhiêu kết nối?
  • MySQL có thể xử lý bao nhiêu yêu cầu?

Nếu bạn nhận được thông báo lỗi quá nhiều kết nối, trong khi kết nối với cơ sở dữ liệu MySQL, điều đó có nghĩa là tất cả các kết nối có sẵn đã được sử dụng bởi các máy khách khác nhau và máy chủ MySQL của bạn không thể mở bất kỳ kết nối mới nào cho đến khi bất kỳ kết nối hiện có nào được đóng.


Theo mặc định, MySQL 5.5+ có thể xử lý tối đa 151 kết nối. Số này được lưu trữ trong biến máy chủ được gọi là max_connections. Bạn có thể cập nhật biến Max_Connections để tăng các kết nối được hỗ trợ tối đa trong MySQL, miễn là máy chủ của bạn có đủ RAM để hỗ trợ các kết nối tăng lên.

Dưới đây là các bước để tăng kết nối tối đa trong MySQL.Markdown to format your answer.

Đăng nhập vào công cụ dòng lệnh MySQL và chạy lệnh sau để nhận các kết nối tối đa mặc định hiện tại được hỗ trợ bởi máy chủ cơ sở dữ liệu của bạn.!ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Bạn sẽ thấy đầu ra sau.


Có hai cách để tăng kết nối MySQL. Ở đây, lệnh của lệnh cập nhật kết nối tối đa lên 200 thông qua công cụ dòng lệnh MySQL mà không cần khởi động lại.

Lệnh trên sẽ tăng kết nối tối đa mà không cần khởi động lại nhưng một khi máy chủ được khởi động lại, các thay đổi sẽ biến mất. Phương pháp này rất hữu ích để tăng kết nối có sẵn trong một hệ thống sản xuất như trang web/ứng dụng mà không phải khởi động lại máy chủ cơ sở dữ liệu của bạn.

Để tăng vĩnh viễn các kết nối tối đa, hãy mở tệp My.cnf,

Đồng nghiệp của tôi Aurimas đã viết một bài viết tuyệt vời một thời gian về việc thay đổi giá trị MAX_CONNONSENTS qua GDB khi máy chủ MySQL đang chạy để loại bỏ lỗi quá nhiều kết nối mà không cần khởi động lại MySQL.

Theo mặc định, 151 là số lượng kết nối máy khách đồng thời được phép tối đa trong MySQL 5.5. Nếu bạn đạt đến giới hạn của MAX_Connections, bạn sẽ nhận được quá nhiều lỗi kết nối khi bạn cố gắng kết nối với máy chủ MySQL của mình. Điều này có nghĩa là tất cả các kết nối có sẵn được sử dụng bởi các khách hàng khác.151 is the maximum permitted number of simultaneous client connections in MySQL 5.5. If you reach the limit of max_connections you will get the “Too many connections” error when you to try to connect to your MySQL server. This means all available connections are in use by other clients.

MySQL cho phép một kết nối bổ sung trên đầu giới hạn MAX_CONNONNENTS được dành riêng cho người dùng cơ sở dữ liệu có siêu đặc quyền để chẩn đoán các vấn đề kết nối. Thông thường người dùng quản trị viên có siêu đặc quyền này. Bạn nên tránh cấp siêu đặc quyền cho người dùng ứng dụng.

MySQL sử dụng một luồng cho mỗi kết nối máy khách và nhiều luồng hoạt động là Kẻ giết người hiệu suất. Thông thường, một số lượng lớn các kết nối đồng thời thực hiện các truy vấn song song có thể gây ra sự chậm lại đáng kể và tăng cơ hội cho bế tắc. Trước MySQL 5.5, nó không được mở rộng tốt mặc dù MySQL ngày càng tốt hơn kể từ đó - nhưng nếu bạn có hàng trăm kết nối hoạt động thực hiện công việc thực sự (điều này không tính kết nối [nhàn rỗi]) thì việc sử dụng bộ nhớ sẽ trưởng thành. Mỗi kết nối yêu cầu trên mỗi bộ đệm chủ đề. Cũng ẩn trong các bảng bộ nhớ yêu cầu nhiều bộ nhớ cộng với yêu cầu bộ nhớ cho bộ đệm toàn cầu. Trên hết, TMP_TABLE_SIZE/MAX_HEAP_TABLE_SIZE mà mỗi kết nối có thể sử dụng, mặc dù chúng không được phân bổ ngay lập tức cho mỗi kết nối mới.

Số lượng kết nối quá cao

Hầu hết thời gian, số lượng kết nối quá cao là kết quả của các lỗi trong các ứng dụng không đóng kết nối đúng cách hoặc do thiết kế sai, như kết nối với MySQL được thiết lập, nhưng sau đó ứng dụng đang bận làm việc khác trước khi đóng tay xử lý MySQL . Trong trường hợp ứng dụng không đóng kết nối đúng cách, Wait_Timeout là một tham số quan trọng để điều chỉnh và loại bỏ các kết nối không sử dụng hoặc nhàn rỗi để giảm thiểu số lượng kết nối hoạt động đến máy chủ MySQL của bạn - và điều này cuối cùng sẽ giúp tránh được quá nhiều kết nối. lỗi. Mặc dù một số hệ thống đang chạy ổn với số lượng lớn các luồng được kết nối, nhưng hầu hết các kết nối đều không hoạt động. Nói chung, các sợi ngủ không mất quá nhiều bộ nhớ - 512 KB trở xuống. Threads_rasty là một số liệu có giá trị để theo dõi vì nó không đếm các luồng ngủ - nó hiển thị hoạt động và số lượng truy vấn hiện đang xử lý, trong khi các biến trạng thái của rERAns_connected hiển thị tất cả các giá trị các luồng được kết nối bao gồm cả kết nối nhàn rỗi. & NBSP; Peter đã viết một bài viết hay về nó. Bạn có thể tìm thấy nó ở đây để biết thêm chi tiết về nó.

Nếu bạn đang sử dụng & nbsp; nhóm kết nối ở phía ứng dụng, max_connection sẽ lớn hơn các kết nối tối đa. Kết nối gộp cũng là một giải pháp thay thế tốt nếu bạn đang mong đợi một số lượng lớn các kết nối.

Giá trị được đề xuất cho max_connections

Nó phụ thuộc vào lượng RAM có sẵn và sử dụng bộ nhớ cho mỗi kết nối. Tăng giá trị Max_Connections tăng số lượng mô tả tệp mà MySQLD yêu cầu. Lưu ý: Không có giới hạn cứng để thiết lập giá trị Max_Connections tối đa. Vì vậy, bạn phải chọn max_connections một cách khôn ngoan theo khối lượng công việc của bạn, số lượng kết nối đồng thời với máy chủ MySQL, v.v. Nói chung, cho phép quá cao giá trị MAX_CONNONS Vấn đề tranh chấp có thể tăng lên.

Trong trường hợp kết nối hoạt động bằng cách sử dụng bảng tạm thời/bộ nhớ, việc sử dụng bộ nhớ có thể tăng cao hơn. Trên các hệ thống có RAM nhỏ hoặc với số lượng kiểm soát kết nối cứng ở phía ứng dụng, chúng ta có thể sử dụng các giá trị nhỏ MAX_CONNONSIONS như 100-300. Các hệ thống có RAM 16G hoặc Max_Connections = 1000 cao hơn là một ý tưởng tốt và bộ đệm trên mỗi kết nối nên có các giá trị tốt/mặc định trong khi trên một số hệ thống chúng ta có thể thấy các kết nối tối đa tối đa 8k, nhưng các hệ thống như vậy thường giảm trong trường hợp tăng tốc độ.

Để đối phó với nó, Oracle và nhóm MariadB đã triển khai nhóm chủ đề. Máy chủ Percona đã chuyển tính năng này từ Mariadb. Đọc nó ở đây về việc triển khai của nó trong Percona Server. Với nhóm luồng được cấu hình đúng, bạn có thể mong đợi thông lượng sẽ không giảm tới vài nghìn kết nối đồng thời, ít nhất là một số loại khối lượng công việc.

Lưu ý: Hãy cẩn thận, rằng trong MySQL 5.6, rất nhiều bộ nhớ được phân bổ khi bạn đặt giá trị Max_Connections quá cao. Kiểm tra báo cáo lỗi này http://bugs.mysql.com/bug.php?id=68514: Beware, that in MySQL 5.6 a lot of memory is allocated when you set max_connections value too high. Check this bug report http://bugs.mysql.com/bug.php?id=68514

Kết luận: Không có quy tắc cố định để chọn giá trị phù hợp cho MAX_CONNENTS vì nó phụ thuộc vào khối lượng công việc của bạn. Có tính đến rằng mỗi luồng được kết nối cần bộ nhớ và chuyển đổi ngữ cảnh đắt tiền. Tôi khuyên bạn nên chọn một số hợp lý cho Max_Connections theo khối lượng công việc của bạn và cố gắng tránh quá nhiều kết nối được mở cùng một lúc để ứng dụng hoạt động đúng.
There is no fixed rule to choose the appropriate value for max_connections because it depends on your workload. Take into account that each thread connected needs memory and expensive context switching. I would recommend choosing a reasonable number for max_connections as per your workload and try to avoid too many connections opened at the same time so the application functions properly.

Có bao nhiêu kết nối MySQL 8 có thể xử lý?

Biến hệ thống Max_Connections xác định số lượng kết nối mà MySQL/MariaDB sẽ chấp nhận. Giá trị mặc định là 151 kết nối, cho phép 150 kết nối thông thường cộng với một kết nối từ tài khoản siêu.150 normal connections plus one connection from the SUPER account.

Làm thế nào để MySQL xử lý quá nhiều kết nối?

Nếu khách hàng gặp phải quá nhiều lỗi kết nối khi cố gắng kết nối với máy chủ MySQLD, tất cả các kết nối có sẵn đều được sử dụng bởi các máy khách khác. Số lượng kết nối được phép được kiểm soát bởi biến hệ thống MAX_CONNONNENTS. Để hỗ trợ nhiều kết nối hơn, hãy đặt MAX_Connections thành một giá trị lớn hơn.set max_connections to a larger value.

DB có thể xử lý bao nhiêu kết nối?

Theo mặc định, SQL Server cho phép tối đa 32767 kết nối đồng thời, số lượng người dùng tối đa có thể đăng nhập đồng thời vào phiên bản SQL Server.32767 concurrent connections which is the maximum number of users that can simultaneously log in to the SQL server instance.

MySQL có thể xử lý bao nhiêu yêu cầu?

MySQL có thể chạy hơn 50.000 truy vấn đơn giản mỗi giây trên phần cứng máy chủ hàng hóa và hơn 2.000 truy vấn mỗi giây từ một phóng viên duy nhất trên mạng Gigabit, do đó, chạy nhiều truy vấn không nhất thiết phải là điều xấu.more than 50,000 simple queries per second on commodity server hardware and over 2,000 queries per second from a single correspondent on a Gigabit network, so running multiple queries isn't necessarily such a bad thing.