Làm cách nào để kiểm tra kết nối ngủ trong MySQL?

Chạy show processlist trong mysql. Có nhiều quá trình như vậy trong cơ sở dữ liệu

Trên thực tế, có quá nhiều kết nối Ngủ trong MySQL, vì vậy có ba lý do dẫn đến ngủ

1. Trước khi thoát chương trình client không gọi mysql_close[]. [viết chương trình sơ suất, hoặc thư viện lớp cơ sở dữ liệu không tự động đóng mỗi kết nối. ]
2. chế độ ngủ của máy khách không gửi bất kỳ yêu cầu nào đến máy chủ trong vài giây được chỉ định bởi wait_timeout hoặc Interactive_timeout. [tương tự như kết nối thông thường, tương tự như cấu trúc giao thức tcp IP chưa hoàn chỉnh, máy chủ luôn nghĩ rằng máy khách vẫn tồn tại [có thể máy khách đã bị ngắt kết nối]]
3. Trước khi máy khách kết thúc, máy khách kết thúc việc gửi yêu cầu đến máy chủ mà không trả về kết quả. [tham khảo quy trình bắt tay ba bước của giao thức tcp IP]

Cách giải quyết cũng đơn giản

cộng

[Mysqld]

Wait_timeout = 10

Hoặc

Mysql> đặt wait_timeout toàn cầu = 10;

Giải pháp hoàn hảo cho MySQL ngủ quá nhiều kết nối

Nếu có quá nhiều kết nối ngủ, điều gì sẽ xảy ra với máy chủ mysql?
Nó tiêu tốn nghiêm trọng tài nguyên máy chủ mysql [chủ yếu là cpu và bộ nhớ] và có thể khiến mysql gặp sự cố.
Điều gì gây ra kết nối giấc ngủ quá mức? . 2cto. com
1. Quá nhiều kết nối liên tục được sử dụng [theo ý kiến ​​của tôi, kết nối liên tục không phù hợp với các hệ thống đồng thời cao]
2. Kết nối mysql không được đóng kịp thời trong chương trình.
3. Truy vấn cơ sở dữ liệu không được tối ưu hóa đủ để tiêu tốn quá nhiều thời gian.

Muốn giải quyết căn bản vấn đề ngủ nhiều kết nối phải lặp lại 3 điểm trên nhưng hiệu quả không nhanh chóng.
Một số người chia sẻ nó trên Internet, sử dụng shell script với cron để thường xuyên tắt các kết nối đã ngủ quá lâu, nhưng phương pháp này rất không mong muốn. Một bạo lực bạo lực điển hình có thể gây ra sự cố dữ liệu và bạn cũng cần phải viết trình bao tương ứng và đặt cron, điều này rất khó thực hiện và không được khuyến nghị.
Cách tốt hơn là để mysql quyết định số phận của các kết nối ngủ này, cách này đơn giản và hiệu quả hơn.
Tệp cấu hình Mysql chứa các mục sau.
Wait_timeout, bạn có thể đặt giây hết thời gian chờ kết nối ở chế độ ngủ. Nếu một kết nối hết thời gian, nó sẽ tự nhiên bị chấm dứt bởi mysql.
Ví dụ: đặt.
Wait_timeout = 100 # đặt thời gian ngủ của kết nối mysql thành 100 giây. Nếu thời gian ngủ của kết nối ngủ vượt quá 100 giây, nó sẽ bị dịch vụ mysql chấm dứt một cách tự nhiên, điều này dễ dàng hơn so với việc viết các tập lệnh shell.
Vậy tôi nên làm gì nếu không thể dừng dịch vụ trên một máy chủ sản xuất đang chạy? .
Đặt wait_timeout toàn cầu = 100
Bạn có thể.
Trong môi trường sản xuất của tôi, phương pháp này đã đạt được kết quả khá tốt.
Tất nhiên, phương pháp cơ bản hơn là khắc phục sự cố từ ba điểm trên.
1. Trong chương trình, không sử dụng các liên kết liên tục, nghĩa là sử dụng mysql_connect thay vì mysql_pconnect.
2. Sau khi chương trình được thực thi, bạn nên gọi rõ ràng mysql_close
3. Bạn có thể phân tích từng bước truy vấn SQL hệ thống, tìm và tối ưu hóa các câu lệnh SQL truy vấn chậm.

Kiểm tra tất cả các truy vấn đang hoạt động và đang chạy trong MySQL

SELECT * FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;

Kiểm tra thời gian của tất cả các truy vấn đang hoạt động hoặc đang ngủ trong MySQL

SELECT ID, USER, HOST, DB, COMMAND,
TIME as time_seconds,
ROUND[TIME / 60, 2] as time_minutes,
ROUND[TIME / 60 / 60, 2] as time_hours,
STATE, INFO
FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;

Chia sẻ cái này

  • Twitter
  • E-mail
  • Facebook
  • LinkedIn
  • WhatsApp
  • Ứng dụng trò chuyện

Như thế này

Thích Đang tải.

Có liên quan

MySQL, RDBMS nguồn mở [Hệ thống quản lý cơ sở dữ liệu quan hệ], là lựa chọn cơ sở dữ liệu hàng đầu cho các trang web có lưu lượng truy cập cao, cấu hình cao và các ứng dụng dựa trên web

Đây là cơ sở dữ liệu thực tế cho các trang web quy mô lớn như Google, Facebook, Twitter, YouTube, v.v. do tính dễ sử dụng, độ tin cậy và Công cụ truy vấn hiệu suất cao cung cấp khả năng chèn dữ liệu nhanh và khả năng tìm kiếm nhanh

MySQL có sẵn cho nhiều nền tảng và được cung cấp với các dịch vụ Linux và Windows khác nhau. ZNetLive cung cấp cơ sở dữ liệu MYSQL với các gói lưu trữ chuyên dụng khác nhau – Máy chủ chuyên dụng Windows và Linux

MySQL là một cơ sở dữ liệu được thiết kế tốt, nơi dữ liệu được lưu trữ trong nhiều bảng và thông tin cần thiết được lấy từ cơ sở dữ liệu thông qua các truy vấn. Truy vấn giúp bạn tìm dữ liệu cụ thể và tạo điều kiện làm việc nhanh chóng với cùng dữ liệu của bạn

cũng đọc. Đạo luật bảo mật thông tin kỹ thuật số trong chăm sóc sức khỏe [DISHA] ở Ấn Độ là gì?

Nhưng đôi khi, cơ sở dữ liệu MySQL có một lượng lớn truy vấn đồng thời, chạy dài và trong khi kiểm tra trạng thái của các kết nối, bạn có thể nhận được một số kết nối có trạng thái- “ngủ”

Truy vấn giấc ngủ MYSQL là gì?

Khi một kết nối cơ sở dữ liệu được tạo, một phiên cũng được tạo đồng thời trên máy chủ cơ sở dữ liệu, nhưng nếu kết nối và phiên đó không được đóng đúng cách thì truy vấn sẽ chuyển sang chế độ ngủ sau khi thời gian chờ kết thúc

Theo hướng dẫn tham khảo MySQL, "Sleep là luồng chờ máy khách gửi một câu lệnh mới tới nó"

Vì vậy, truy vấn ngủ là truy vấn chờ thời gian chờ kết thúc. Điều đó có nghĩa là truy vấn cần có thời gian để thực hiện và kết thúc ở trạng thái ngủ

Ảnh hưởng của một số lượng lớn truy vấn MYSQL – ngủ

  • Tăng mức tiêu thụ tài nguyên CPU và bộ nhớ [RAM, bộ đệm và bộ xử lý]
  • Làm chậm máy chủ
  • Tăng thời gian ngừng hoạt động cho các trang web - tin tặc cố gắng làm chậm trang web bằng cách tiêm SQL vào chế độ ngủ

Giải pháp sao lưu hỗ trợ AI

Các tính năng sao lưu chưa từng có từ tương lai

Nhận bản dùng thử miễn phí ngay bây giờ

Tại sao quá trình ngủ MySQL diễn ra?

Các kết nối đang chờ truy vấn MYSQL mới, hay còn gọi là quá trình ngủ, xảy ra nếu sử dụng kết nối liên tục đến cơ sở dữ liệu trong mã hóa hoặc nếu kết nối cơ sở dữ liệu không được đóng đúng cách

Vì vậy, bạn nhận được các kết nối ở trạng thái ngủ khi tập lệnh PHP kết nối với MySQL, các truy vấn được thực thi và kết nối vẫn mở mà không ngắt kết nối với máy chủ

Cho đến khi luồng chết, mọi bộ đệm trước luồng sẽ được lưu trong bộ nhớ trong 28.800 giây trong MySQL theo mặc định.
Vì vậy, khi nhiều quy trình PHP vẫn được kết nối mà không làm bất cứ điều gì trên cơ sở dữ liệu, bạn sẽ có nhiều quy trình ở trạng thái ngủ.

Làm thế nào để khắc phục những vấn đề này?

Để khắc phục vấn đề này của lệnh ngủ SQL, MySQL sử dụng hai tham số

Interactive_ timeout và wait_ timeout

Những giá trị này yêu cầu phải đặt các giá trị nhất định để giúp chạy truy vấn đến thời gian đã đặt đó

Theo mặc định, cả hai tham số đã đặt giá trị là 28800 giây [i. e. 8 giờ]

cũng đọc. 12 biện pháp an ninh mạng để bảo vệ dữ liệu kinh doanh của bạn ngay lập tức

Để đặt các tham số này trong MySQL mà không cần khởi động lại, hãy chạy hai lệnh bên dưới trong thiết bị đầu cuối của nó

ĐẶT thời gian chờ tương tác TOÀN CẦU = 180;
ĐẶT thời gian chờ TOÀN CẦU_ thời gian chờ = 180;

Bạn cần thêm các thông số này vào. cnf của MySQL trong phần mysqld, để chúng có thể có hiệu lực sau khi khởi động lại máy chủ cơ sở dữ liệu

Ngoài ra, ở cuối mỗi tập lệnh, hãy thêm hàm mysql_ close[] để đóng kết nối với cơ sở dữ liệu sau khi truy vấn xong

Nếu bạn có quyền truy cập root vào máy chủ của mình, hãy sử dụng lệnh sau để chỉnh sửa tệp my. cnf

$Xác định vị trí của tôi. cnf

Nó sẽ hiển thị vị trí của tệp cấu hình MySQL, sau đó sử dụng lệnh sau để chỉnh sửa tệp cấu hình của tôi. cnf.
$vi /etc/my. cnf

Và thêm dòng này vào của tôi. cnf

chờ_thời gian chờ = 60

thời gian tính bằng giây ở đâu

Như vậy, các kết nối sẽ tự động đóng lại sau 60 giây chờ đợi

Nếu bạn có bất kỳ thông tin phản hồi, chia sẻ nó thông qua các ý kiến

Dịch vụ ZNetLive cung cấp

Đăng ký tên miền

Hosting chia sẻ tốt nhất

Gói lưu trữ WordPress

Gói lưu trữ VPS

Mua máy chủ chuyên dụng

lipika

Lipika Là một người vui vẻ, thích viết lách. Cô ấy thích tìm hiểu về tất cả những thứ liên quan đến kỹ thuật và thích hướng dẫn người khác về nó. Trong thời gian rảnh rỗi, cô ấy thích khiêu vũ và nghe nhạc. Bạn có thể gặp cô ấy tại Google+

Kết nối ngủ trong MySQL là gì?

Truy vấn MySQL đang ngủ là một kết nối mở không hoạt động . Khi có quá nhiều truy vấn tồn tại cùng lúc, máy chủ MySQL sẽ hết kết nối khiến máy chủ không thể xử lý các truy vấn. Tuy nhiên, giết chết các truy vấn ngủ một cách mù quáng có thể có kết quả xấu, chẳng hạn như hỏng cơ sở dữ liệu hoặc mất dữ liệu.

Làm cách nào tôi có thể thấy các kết nối trong MySQL?

Có thể biết kết nối đang hoạt động hoặc toàn bộ với sự trợ giúp của biến thread_connected. Biến cho biết về số lượng kết nối hiện đang mở. mysql> hiển thị trạng thái trong đó `tên_biến` = 'Threads_connected'; Đây là kết quả.

Làm cách nào để kiểm tra các kết nối tối đa trong MySQL?

Để kiểm tra số lượng max_connections hiện tại, hãy đăng nhập vào máy khách dòng lệnh MySQL/MariaDB bằng lệnh sau. .
mysql -u gốc -p
HIỂN THỊ các biến;
sudo nano /etc/my. cnf
[mysqld]
max_connections=[số tối đa mới mong muốn]
[mysqld] max_connections=200
mysql -u gốc -p

Ngủ trong lệnh Processlist là gì?

Chuỗi ngủ có nghĩa là không làm gì . Thời gian quá lớn vì truy vấn luồng anthor, nhưng không ngắt kết nối máy chủ, mặc định wait_timeout=28800; vì vậy bạn có thể đặt giá trị nhỏ hơn, ví dụ: 10. bạn cũng có thể giết chủ đề. Theo dõi câu trả lời này để nhận thông báo.

Chủ Đề