Kết nối liên tục mysql so với không liên tục

Hầu hết các trang web có khối lượng lớn triển khai php và mysql đều không kích hoạt kết nối liên tục. Làm theo tấm gương của các nhà lãnh đạo

  • MySQL có bộ đệm luồng giúp kết nối không liên tục rất nhanh. Đảm bảo rằng bộ đệm luồng mysql của bạn được đặt đủ cao để xử lý mức tải của bạn

  • Khi bạn khóa một bảng, thông thường bảng sẽ được mở khóa khi kết nối đóng, nhưng vì các kết nối liên tục không đóng nên bất kỳ bảng nào bạn vô tình để khóa sẽ vẫn bị khóa và cách duy nhất để mở khóa chúng là đợi kết nối hết thời gian chờ hoặc hủy . Vấn đề khóa tương tự xảy ra với các giao dịch

  • Các bảng tạm thời bị hủy khi kết nối đóng, nhưng vì các kết nối liên tục không đóng nên các bảng tạm thời không phải là tạm thời. Nếu bạn không loại bỏ các bảng tạm thời một cách rõ ràng khi hoàn thành, bảng đó sẽ tồn tại cho một máy khách mới sử dụng lại cùng một kết nối. Vấn đề tương tự xảy ra với việc thiết lập các biến phiên

  • Nếu PHP và MySQL trên cùng một máy chủ hoặc mạng cục bộ, thời gian kết nối có thể không đáng kể, trong trường hợp đó không có lợi cho các kết nối liên tục

  • Máy chủ web không hoạt động tốt với các kết nối liên tục. Khi nó nhận được yêu cầu từ một máy khách mới, thay vì sử dụng một trong những đứa trẻ có sẵn đã mở một kết nối liên tục, nó có xu hướng sinh ra một đứa trẻ mới, sau đó phải mở một kết nối cơ sở dữ liệu mới. Điều này gây ra các quá trình dư thừa chỉ ở trạng thái ngủ, lãng phí tài nguyên và gây ra lỗi khi bạn đạt đến số lượng kết nối tối đa của mình, ngoài ra nó còn làm mất đi bất kỳ lợi ích nào của các kết nối liên tục

Bằng cách tránh các kết nối liên tục, bạn thực sự có thể tăng hiệu suất với máy chủ web của mình cũng như loại bỏ bất kỳ sự cố nào khác mà bạn có thể gặp phải, chẳng hạn như lỗi 503 và thời gian chờ kết nối

Kết nối liên tục là các liên kết SQL không đóng khi quá trình thực thi tập lệnh của bạn kết thúc. Khi một kết nối liên tục được yêu cầu, PHP sẽ kiểm tra xem đã có một kết nối liên tục giống hệt nhau chưa [vẫn mở từ trước đó] - và nếu nó tồn tại, nó sẽ sử dụng nó. Nếu nó không tồn tại, nó sẽ tạo liên kết. Kết nối 'giống hệt' là kết nối được mở cho cùng một máy chủ, có cùng tên người dùng và cùng mật khẩu [nếu có]

Những người không hoàn toàn quen thuộc với cách máy chủ web hoạt động và phân phối tải có thể nhầm lẫn các kết nối liên tục với những gì họ không làm. Cụ thể, chúng không cung cấp cho bạn khả năng mở 'phiên người dùng' trên cùng một liên kết SQL, chúng không cung cấp cho bạn khả năng xây dựng giao dịch một cách hiệu quả và chúng không thực hiện nhiều thứ khác. Trên thực tế, cực kỳ rõ ràng về chủ đề này, các kết nối liên tục không cung cấp cho bạn bất kỳ chức năng nào mà những người anh em không liên tục của chúng không thể thực hiện được

Tại sao?

Điều này liên quan đến cách thức hoạt động của các máy chủ web. Có ba cách mà máy chủ web của bạn có thể sử dụng PHP để tạo các trang web

Phương pháp đầu tiên là sử dụng PHP làm "trình bao bọc" CGI. Khi chạy theo cách này, một phiên bản của trình thông dịch PHP được tạo và hủy cho mọi yêu cầu trang [đối với trang PHP] tới máy chủ web của bạn. Bởi vì nó bị hủy sau mỗi yêu cầu, mọi tài nguyên mà nó có được [chẳng hạn như liên kết đến máy chủ cơ sở dữ liệu SQL] sẽ bị đóng khi nó bị hủy. Trong trường hợp này, bạn không thu được gì từ việc cố gắng sử dụng các kết nối liên tục -- đơn giản là chúng không tồn tại

Phương pháp thứ hai và phổ biến nhất là chạy PHP dưới dạng một mô-đun trong máy chủ web đa xử lý, hiện chỉ bao gồm Apache. Một máy chủ đa xử lý thường có một quy trình [cha mẹ] điều phối một tập hợp các quy trình [con của nó], những người thực sự thực hiện công việc phục vụ các trang web. Khi mỗi yêu cầu đến từ một khách hàng, nó sẽ được chuyển đến một trong những đứa trẻ chưa phục vụ khách hàng khác. Điều này có nghĩa là khi cùng một máy khách đưa ra yêu cầu thứ hai tới máy chủ, nó có thể được phục vụ bởi một tiến trình con khác với lần đầu tiên. Kết nối liên tục làm gì cho bạn trong trường hợp này, nó làm cho mỗi tiến trình con chỉ cần kết nối với máy chủ SQL của bạn trong lần đầu tiên nó phục vụ một trang khiến chúng ta có kết nối như vậy. Khi một trang khác sau đó yêu cầu kết nối với máy chủ SQL, nó có thể sử dụng lại kết nối mà trang con đã thiết lập trước đó

Phương pháp cuối cùng là sử dụng PHP làm trình cắm thêm cho máy chủ web đa luồng. Hiện tại đây chỉ là lý thuyết -- PHP chưa hoạt động như một phần bổ sung cho bất kỳ máy chủ web đa luồng nào. Công việc đang được tiến hành để hỗ trợ ISAPI, WSAPI và NSAPI [trên Windows], tất cả sẽ cho phép PHP được sử dụng làm phần bổ trợ trên các máy chủ đa luồng như Netscape FastTrack, Máy chủ Thông tin Internet [IIS] của Microsoft và Trang web của O'Reilly . Khi điều này xảy ra, hành vi về cơ bản sẽ giống như đối với mô hình đa quy trình được mô tả trước đây

Nếu các kết nối liên tục không có bất kỳ chức năng bổ sung nào, thì chúng có tác dụng gì?

Câu trả lời ở đây cực kỳ đơn giản -- hiệu quả. Kết nối liên tục là tốt nếu chi phí để tạo liên kết đến máy chủ SQL của bạn cao. Việc chi phí này có thực sự cao hay không phụ thuộc vào nhiều yếu tố. Chẳng hạn như, loại cơ sở dữ liệu đó là gì, nó có nằm trên cùng một máy tính mà máy chủ web của bạn đặt hay không, máy chủ SQL được tải như thế nào, v.v. Điểm mấu chốt là nếu chi phí kết nối đó cao, các kết nối liên tục sẽ giúp bạn đáng kể. Chúng khiến quy trình con chỉ kết nối một lần trong toàn bộ vòng đời của nó, thay vì mỗi khi nó xử lý một trang yêu cầu kết nối với máy chủ SQL. Điều này có nghĩa là đối với mọi đứa trẻ đã mở một kết nối liên tục sẽ có kết nối liên tục mở của riêng nó với máy chủ. Ví dụ: nếu bạn có 20 quy trình con khác nhau chạy tập lệnh tạo kết nối liên tục đến máy chủ SQL của mình, thì bạn sẽ có 20 kết nối khác nhau đến máy chủ SQL, mỗi kết nối từ một quy trình con.

Một bản tóm tắt quan trọng. Các kết nối liên tục được thiết kế để có ánh xạ một-một tới các kết nối thông thường. Điều đó có nghĩa là bạn luôn có thể thay thế các kết nối liên tục bằng các kết nối không liên tục và điều đó sẽ không thay đổi cách hoạt động của tập lệnh của bạn. Nó có thể [và có thể sẽ] thay đổi hiệu quả của tập lệnh, nhưng không thay đổi hành vi của nó

Sự khác biệt giữa kết nối liên tục và không liên tục là gì?

Sau khi khách hàng nhận được đối tượng không liên tục, kết nối sẽ bị đóng ngay lập tức . Đây là sự khác biệt cơ bản giữa liên tục và không liên tục. Kết nối liên tục đảm bảo chuyển nhiều đối tượng qua một kết nối.

Kết nối liên tục trong MySQL là gì?

Kết nối liên tục là liên kết không đóng khi quá trình thực thi tập lệnh của bạn kết thúc . Khi một kết nối liên tục được yêu cầu, PHP sẽ kiểm tra xem đã có một kết nối liên tục giống hệt nhau chưa [vẫn mở từ trước đó] - và nếu nó tồn tại, nó sẽ sử dụng nó.

Nhược điểm của việc sử dụng kết nối liên tục trong PDO là gì?

Hạn chế lớn nhất đối với kết nối liên tục là nó giới hạn số lượng người dùng mà bạn có thể duyệt trang web của mình . nếu MySQL được định cấu hình để chỉ cho phép 10 kết nối đồng thời thì khi người thứ 11 cố gắng duyệt trang web của bạn, nó sẽ không hoạt động với họ. PDO không quản lý sự kiên trì.

Một kết nối tạm thời là gì?

Lỗi tạm thời, còn được gọi là lỗi tạm thời, là lỗi sẽ tự khắc phục . Thông thường, các lỗi này biểu hiện khi kết nối với máy chủ cơ sở dữ liệu bị ngắt. Ngoài ra, không thể mở các kết nối mới đến máy chủ. Lỗi tạm thời có thể xảy ra, ví dụ như khi xảy ra lỗi phần cứng hoặc mạng.

Chủ Đề