Làm thế nào tốn kém là mở và đóng kết nối DB?


15

Mức độ chuyên sâu của CPU là mở và đóng kết nối DB (đối với ứng dụng web) trong MySQL

  • ... Khi phần mềm DB có trên localhost?
  • ... Khi phần mềm DB ở trên một máy khác?

Câu trả lời:


12

Hãy suy nghĩ về dung lượng bộ nhớ được phân bổ cho mỗi Kết nối DB. Những thứ phải được phân bổ? Theo Hướng dẫn nghiên cứu chứng chỉ MySQL 5.0, trang 357 :

Máy chủ duy trì một số bộ đệm cho mỗi kết nối máy khách. Một được sử dụng như một bộ đệm truyền thông để trao đổi thông tin với khách hàng. Các bộ đệm khác được duy trì cho mỗi khách hàng để đọc các bảng và thực hiện các hoạt động nối và sắp xếp.

Cài đặt nào chi phối bộ đệm trên mỗi kết nối?

Phải mất thời gian để phân bổ và phân bổ các bộ đệm này khi có kết nối. Đừng quên nhân tổng của các giá trị đó bằng max_connections . Là một lưu ý phụ, xin vui lòng không sử dụng mysql_pconnect vì các kết nối liên tục của PHP và MySQL không hòa hợp với nhau. Đây là hai liên kết thông tin về chủ đề này:

Trong môi trường đọc nhiều, viết nặng, chẳng hạn như OLTP, điều này sẽ tốn kém về mặt sử dụng RAM và khả năng ức chế do hoán đổi trong HĐH. Trên một trang web ít viết, low_read, tôi sẽ không lo lắng nhiều.


10

Tôi không chắc nó có vấn đề "tốn kém hơn bao nhiêu". Nó chắc chắn tốn kém hơn so với việc sử dụng lại cùng một kết nối. Những gì bạn sẽ quan sát sẽ phụ thuộc vào việc bạn có sử dụng chính xác kết nối hay không, mức độ bão hòa của hồ bơi, tài nguyên có sẵn trên hộp, v.v.

Nói chung, nếu bạn đang thực hiện một vòng lặp để làm một số tương tác với cơ sở dữ liệu, bạn sẽ được đến nay khấm khá hơn tái sử dụng các kết nối hoạt động cùng hơn mở cửa và đóng cửa trong vòng lặp (một chất chống mẫu mà tôi thấy khá thường xuyên) .


4

Vấn đề nan giải giữa việc sử dụng lại một đối tượng và xé nát nó và xây dựng lại (cả hai đều có ưu điểm và nhược điểm) thường có thể được giải quyết với một thỏa hiệp: lưu trữ đối tượng, nhưng trong một thời gian giới hạn (tức là hết hạn). Nếu đối tượng được truy cập thường xuyên thì nó tiếp tục được sử dụng lại. Nhưng nếu nó không được sử dụng trong một thời gian, thì một cơ chế hết hạn sẽ loại bỏ nó, buộc nó phải được tạo lại khi cần thiết một lần nữa.

Một hệ thống có thể có một móc nối toàn cầu cho các loại bộ nhớ cache được gọi khi bộ nhớ thấp, điều này kích hoạt tất cả chúng để loại bỏ các đối tượng không sử dụng gần đây.


2

Mysql lưu trữ các kết nối (hoặc chủ đề) bằng cách sử dụng Cache Cache (thread_cache_size). Giá trị tối đa cho nó là 100. Khi máy khách đóng kết nối, nó sẽ được trả về bộ đệm. Khi một kết nối mới mở ra, nó sẽ kiểm tra bộ đệm của luồng. BẬT hệ thống rất bận rộn, việc mở kết nối đóng có thể tốn kém, đặc biệt nếu bạn có các truy vấn chạy dài.

https://dev.mysql.com/doc/refman/5.6/en/connection-threads.html Nếu bạn có thể đủ khả năng Mysql Enterprise, bạn có thể sử dụng trình cắm Thread Pool được triển khai trong Mysql 5.6.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.