MySQL có thể xử lý nhiều kết nối không?

Tôi muốn tăng số kết nối tối đa cho Dịch vụ cơ sở dữ liệu quan hệ Amazon (Amazon RDS) dành cho MySQL hoặc Amazon RDS dành cho phiên bản CSDL PostgreSQL của mình

Nghị quyết

Xem giá trị max_connections hiện tại

Trong Amazon RDS cho MySQL, chỉ số max_connections giám sát số lượng kết nối máy khách đồng thời (được phép) tối đa đã đặt

Theo mặc định, tham số max_connections dựa trên công thức sau trong Amazon RDS for MySQL (được tính từ giá trị DBInstanceClassMemory)

max_connections = DBInstanceClassMemory/12582880

Để kiểm tra giá trị hiện tại của max_connections, hãy chạy lệnh sau sau khi kết nối với phiên bản Amazon RDS cho MySQL của bạn

SHOW GLOBAL VARIABLES LIKE 'max_connections';

Trong Amazon RDS cho PostgreSQL, chỉ số max_connections theo dõi số lượng kết nối đồng thời tối đa đã đặt. Theo mặc định, tham số max_connections dựa trên công thức sau trong Amazon RDS for PostgreSQL (được tính toán từ giá trị DBInstanceClassMemory)

max_connections = LEAST({DBInstanceClassMemory/9531392}, 5000)

Để kiểm tra giá trị hiện tại cho max_connections, hãy chạy lệnh sau sau khi kết nối với phiên bản Amazon RDS cho PostgreSQL của bạn

postgres=> show max_connections;

Cả RDS cho MySQL và RDS cho PostgreSQL đều phụ thuộc vào lớp phiên bản mà phiên bản Amazon RDS sử dụng. Lớp phiên bản CSDL có nhiều bộ nhớ khả dụng hơn sẽ hỗ trợ số lượng kết nối cơ sở dữ liệu lớn hơn

Lưu ý rằng số lượng max_connections mặc định được tính bằng công thức có thể khác một chút so với số lượng kết nối mặc định được trả về từ lệnh trước đó. Điều này là do một số bộ nhớ trong tổng số DBInstanceClassMemory được dành riêng cho các hoạt động của hệ điều hành cơ bản. Lệnh trước chỉ xem xét bộ nhớ dành riêng cho công cụ PostgreSQL chứ không phải cho hệ điều hành máy chủ cơ bản

Xem lại lý do cho quá nhiều kết nối

Khi số lượng kết nối máy khách vượt quá giá trị max_connections, bạn sẽ gặp lỗi tương tự như sau

Các yếu tố sau có thể khiến kết nối cơ sở dữ liệu của bạn vượt quá giá trị max_connections

Tăng số lượng máy khách hoặc ứng dụng kết nối với phiên bản CSDL. Điều này là do khối lượng công việc tăng lên hoặc khóa cấp bảng/hàng

Đóng kết nối máy khách hoặc ứng dụng không đúng cách sau khi kết thúc hoạt động. Khi kết nối máy chủ không được đóng đúng cách, ứng dụng khách sẽ mở ra một kết nối mới. Theo thời gian, các kết nối máy chủ mới này có thể khiến phiên bản của bạn vượt quá giá trị max_connections. Để liệt kê tất cả các kết nối đang hoạt động cho phiên bản RDS cho MySQL DB của bạn, hãy chạy lệnh sau

Để xem các kết nối cho từng cơ sở dữ liệu cho phiên bản RDS cho PostgreSQL của bạn, hãy chạy lệnh sau

SELECT datname, numbackends FROM pg_stat_database;

ngủ kết nối. Kết nối đang ngủ còn được gọi là kết nối mở không hoạt động được tạo ra khi bạn đặt giá trị cao hơn cho các tham số thời gian chờ kết nối, chẳng hạn như wait_timeout hoặc Interactive_timeout trong MySQL. Nếu bạn định cấu hình giới hạn kết nối quá cao, thì bạn có thể phải sử dụng nhiều bộ nhớ hơn ngay cả khi những kết nối đó không được sử dụng. Do đó, khi máy chủ ứng dụng cố gắng mở tất cả các kết nối máy khách tới cơ sở dữ liệu, các kết nối này có thể bị từ chối. Để chấm dứt kết nối đang ngủ trong phiên bản RDS cho cơ sở dữ liệu MySQL, hãy chạy lệnh sau

CALL mysql.rds_kill(example-pid);

kết nối nhàn rỗi. Bạn có thể xem các kết nối không hoạt động trong phiên bản RDS cho PostgreSQL bằng cách chạy truy vấn sau. Truy vấn này hiển thị thông tin về các quy trình phụ trợ với một trong các trạng thái sau trong hơn 15 phút. 'nhàn rỗi', 'nhàn rỗi trong giao dịch', 'nhàn rỗi trong giao dịch (bị hủy bỏ)' và 'bị vô hiệu hóa'

SELECT * FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
AND state_change < current_timestamp - INTERVAL '15' MINUTE;

Để chấm dứt kết nối không hoạt động trong phiên bản RDS cho PostgreSQL, hãy chạy lệnh sau

SELECT pg_terminate_backend(example-pid)

Mẹo. Cách tốt nhất là chỉ định cấu hình các kết nối đang hoạt động cần thiết cho hiệu suất của ứng dụng. Bạn cũng có thể cân nhắc nâng cấp lên lớp phiên bản Cơ sở dữ liệu Amazon RDS lớn hơn

Tăng giá trị max_connections

Bạn có thể tăng số lượng kết nối tối đa đến RDS cho MySQL hoặc RDS cho phiên bản CSDL PostgresSQL bằng các phương pháp sau

  • Đặt giá trị lớn hơn cho thông số max_connections bằng cách sử dụng nhóm thông số cấp phiên bản tùy chỉnh. Việc tăng tham số max_connections không gây ra bất kỳ sự cố ngừng hoạt động nào. Mặc dù bạn có thể tăng giá trị của max_connections ngoài giá trị mặc định, nhưng đó không phải là cách tốt nhất. Điều này là do, phiên bản có thể gặp sự cố khi khối lượng công việc tăng lên và cần nhiều bộ nhớ hơn. Việc tăng số lượng kết nối có thể làm tăng mức sử dụng bộ nhớ. Các phiên bản sắp hết bộ nhớ có thể bị sập. Điều này đặc biệt đúng đối với các trường hợp nhỏ hơn. Nếu bạn tăng giá trị max_connections, hãy đảm bảo giám sát việc sử dụng tài nguyên. Ngoài ra, hãy nhớ tham khảo ý kiến ​​với DBA của bạn về mức tăng. Cách tốt nhất là giữ nguyên giá trị mặc định hoặc mở rộng quy mô lên một lớp phiên bản lớn hơn khi cần nhiều kết nối hơn
  • Nếu phiên bản CSDL của bạn đang sử dụng nhóm tham số mặc định, thì hãy thay đổi nhóm tham số thành nhóm tham số tùy chỉnh. Đảm bảo liên kết nhóm tham số DB tùy chỉnh với phiên bản Amazon RDS của bạn và khởi động lại phiên bản. Sau khi nhóm thông số tùy chỉnh mới được liên kết với phiên bản CSDL của bạn, bạn có thể sửa đổi giá trị thông số max_connections. Để biết thêm thông tin, hãy xem Làm cách nào để sửa đổi các giá trị của nhóm tham số Cơ sở dữ liệu Amazon RDS?
    Ghi chú. Thay đổi nhóm tham số có thể gây ra sự cố ngừng hoạt động. Để biết thêm thông tin, hãy xem Làm việc với các nhóm tham số DB
  • Thay đổi quy mô phiên bản CSDL của bạn thành một lớp phiên bản CSDL có nhiều bộ nhớ hơn. Lưu ý rằng việc tăng quy mô các phiên bản RDS sẽ ảnh hưởng đến việc thanh toán của tài khoản. Để tìm hiểu thêm, hãy xem Lập hóa đơn phiên bản CSDL cho Amazon RDS
    Cảnh báo. Thời gian ngừng hoạt động xảy ra khi bạn sửa đổi phiên bản Cơ sở dữ liệu Amazon RDS

Thực hiện theo các phương pháp hay nhất để định cấu hình tham số max_connections

Đảm bảo xem xét các phương pháp hay nhất sau đây khi làm việc với tham số max_connections cho phiên bản CSDL của bạn

  • Các giới hạn kết nối mặc định được điều chỉnh cho các hệ thống sử dụng các giá trị mặc định cho những người sử dụng bộ nhớ chính khác, chẳng hạn như vùng đệm. Đó là cách tốt nhất để mở rộng quy mô của lớp cá thể, thay vì thay đổi giá trị của lớp cá thể. Tuy nhiên, nếu phiên bản của bạn có nhiều bộ nhớ trống, thì bạn có thể thay đổi tham số này theo cách thủ công. Trước khi thay đổi các cài đặt này cho Phiên bản CSDL của bạn, hãy cân nhắc điều chỉnh giới hạn kết nối để tính đến việc tăng hoặc giảm bộ nhớ khả dụng trên phiên bản CSDL
  • Đặt giá trị max_connections cao hơn một chút so với số lượng kết nối tối đa mà bạn muốn mở trên mỗi phiên bản CSDL
  • Đối với phiên bản RDS cho MySQL, nếu bạn đã kích hoạt Lược đồ hiệu suất, thì hãy chú ý đến cài đặt tham số max_connections. Các cấu trúc bộ nhớ Lược đồ hiệu suất được định cỡ tự động dựa trên các biến cấu hình máy chủ. Bạn đặt biến càng cao, Lược đồ hiệu suất sử dụng bộ nhớ càng nhiều. Trong một số trường hợp cực đoan, tình trạng này có thể dẫn đến sự cố hết bộ nhớ trên các loại phiên bản nhỏ hơn, chẳng hạn như T2 và T3. Nếu bạn đang sử dụng Lược đồ hiệu suất, thì cách tốt nhất là để cài đặt max_connections ở giá trị mặc định. Nếu bạn định tăng đáng kể giá trị max_connections (lên cao hơn giá trị mặc định), thì hãy cân nhắc việc tắt Lược đồ hiệu suất
    Ghi chú. Nếu bạn kích hoạt Thông tin chi tiết về hiệu suất cho một phiên bản Cơ sở dữ liệu Amazon RDS cho MySQL, thì Lược đồ hiệu suất sẽ tự động được kích hoạt
  • Đối với phiên bản RDS cho MySQL, khi bạn điều chỉnh tham số max_connections, hãy đảm bảo xem lại các tham số liên quan đến kết nối MySQL sau. chờ_thời gian chờ. Số giây máy chủ đợi hoạt động trên kết nối tệp TCP/IP hoặc tệp Unix không tương tác trước khi đóng kết nối
    Interactive_timeout. Số giây máy chủ đợi hoạt động trên kết nối tương tác trước khi đóng kết nối
    net_read_timeout. Số giây chờ thêm dữ liệu từ kết nối TCP/IP trước khi bỏ hoạt động đọc
    net_write_timeout. Số giây chờ đợi trên các kết nối TCP/IP để ghi một khối trước khi bỏ hoạt động ghi
    max_execution_time. Thời gian chờ thực thi cho câu lệnh SELECT, tính bằng mili giây
    max_connect_errors. Máy chủ bị chặn khỏi các kết nối tiếp theo nếu có nhiều hơn số lượng kết nối bị gián đoạn này
    max_user_connections. Số lượng kết nối đồng thời tối đa được phép cho bất kỳ tài khoản MySQL cụ thể nào
  • Đối với phiên bản RDS cho PostgreSQL, khi bạn điều chỉnh tham số max_connections, hãy nhớ xem lại các tham số liên quan đến kết nối PostgreSQL sau
    idle_in_transaction_session_timeout. Chấm dứt bất kỳ phiên nào có giao dịch mở không hoạt động lâu hơn thời lượng được chỉ định tính bằng mili giây. Điều này cho phép bất kỳ khóa nào do phiên đó nắm giữ được giải phóng và khe kết nối được sử dụng lại. Ngoài ra, các bộ dữ liệu chỉ hiển thị cho giao dịch này được hút sạch
    tcp_keepalives_idle. Số giây không hoạt động mà sau đó hệ điều hành sẽ gửi thông báo lưu giữ TCP tới máy khách
    tcp_keepalives_interval. Số giây sau đó một thông báo cố định TCP không được máy khách xác nhận được truyền lại
    tcp_keepalives_count. Số lượng lưu giữ TCP có thể bị mất trước khi kết nối của máy chủ với máy khách được coi là đã chết

Ghi chú. Bài viết này không bao gồm các giá trị được đề xuất cho các tham số được liệt kê vì các giá trị này thay đổi tùy theo trường hợp sử dụng của bạn

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

Theo mặc định 151 là số lượng kết nối máy khách đồng thời tối đa được phép trong MySQL 5. 5 . Nếu bạn đạt đến giới hạn max_connections, bạn sẽ gặp lỗi “Quá nhiều kết nối” khi 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 đang được sử dụng bởi các máy khách khác.

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

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 SUPER.

MySQL có hỗ trợ đồng thời không?

Hầu hết các công cụ lưu trữ giao dịch của MySQL, chẳng hạn như InnoDB, Falcon và PBXT, không sử dụng cơ chế khóa hàng đơn giản. Thay vào đó, họ sử dụng khóa cấp độ hàng kết hợp với kỹ thuật tăng tính đồng thời được gọi là kiểm soát đồng thời đa phiên bản (MVCC) .

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

Xin chào, Theo mặc định, SQL Server cho phép tối đa 32767 kết nối đồng thời , đây là số lượng người dùng tối đa có thể đồng thời đăng nhập vào .