Hãy chắc chắn đọc câu trả lời dưới đây , trong đó chi tiết các cách để giảm thiểu các vấn đề được nêu ở đây.
Những nhược điểm tương tự tồn tại khi sử dụng PDO như với bất kỳ giao diện cơ sở dữ liệu PHP nào khác có các kết nối liên tục: nếu tập lệnh của bạn kết thúc bất ngờ ở giữa các hoạt động của cơ sở dữ liệu, yêu cầu tiếp theo có kết nối còn lại sẽ chọn nơi tập lệnh chết bị tắt. Kết nối được giữ mở ở cấp trình quản lý quy trình (Apache cho mod_php, quy trình FastCGI hiện tại nếu bạn đang sử dụng FastCGI, v.v.), không phải ở cấp độ PHP và PHP không cho biết quy trình cha mẹ cho phép kết nối chết khi kịch bản chấm dứt bất thường.
Nếu tập lệnh chết bảng bị khóa, các bảng đó sẽ vẫn bị khóa cho đến khi kết nối bị chết hoặc tập lệnh tiếp theo có kết nối sẽ tự mở khóa các bảng.
Nếu tập lệnh chết nằm ở giữa một giao dịch, có thể chặn vô số bảng cho đến khi bộ đếm thời gian bế tắc bắt đầu, và thậm chí sau đó, bộ đếm thời gian bế tắc có thể giết chết yêu cầu mới hơn thay vì yêu cầu cũ hơn gây ra sự cố.
Nếu tập lệnh chết nằm ở giữa một giao dịch, tập lệnh tiếp theo có kết nối đó cũng có trạng thái giao dịch. Rất có thể (tùy thuộc vào thiết kế ứng dụng của bạn) rằng tập lệnh tiếp theo có thể không thực sự cố gắng thực hiện giao dịch hiện tại hoặc sẽ cam kết khi không nên hoặc quay lại khi không nên có.
Đây chỉ là phần nổi của tảng băng chìm. Tất cả có thể được giảm nhẹ đến một mức độ bằng cách luôn cố gắng dọn dẹp sau khi kết nối bẩn trên mỗi yêu cầu tập lệnh, nhưng đó có thể là một nỗi đau tùy thuộc vào cơ sở dữ liệu. Trừ khi bạn đã xác định tạo ra các kết nối cơ sở dữ liệu như một điều đó là một nút cổ chai trong kịch bản của bạn (phương tiện này, bạn đã đang done profiling sử dụng Xdebug và / hoặc xhprof ), bạn nên không xem xét kết nối liên tục như một giải pháp cho bất cứ điều gì.
Hơn nữa, hầu hết các cơ sở dữ liệu hiện đại (bao gồm PostgreSQL) có các cách thực hiện nhóm kết nối ưa thích của riêng chúng mà không có nhược điểm ngay lập tức mà các kết nối liên tục dựa trên vanilla PHP làm.
Để làm rõ một điểm, chúng tôi sử dụng các kết nối liên tục tại nơi làm việc của tôi, nhưng không phải bằng sự lựa chọn. Chúng tôi đã gặp phải hành vi kết nối kỳ lạ , trong đó kết nối ban đầu từ máy chủ ứng dụng đến máy chủ cơ sở dữ liệu của chúng tôi mất đúng ba giây, khi đó nó chỉ mất một phần của một phần giây. Chúng tôi nghĩ rằng đó là một lỗi kernel. Chúng tôi đã từ bỏ việc cố gắng khắc phục sự cố vì nó xảy ra ngẫu nhiên và không thể sao chép theo yêu cầu và CNTT thuê ngoài của chúng tôi không có khả năng cụ thể để theo dõi nó.
Bất kể, khi những người trong kho đang xử lý vài trăm bộ phận đến và mỗi bộ phận mất ba giây rưỡi thay vì nửa giây, chúng tôi phải hành động trước khi họ bắt cóc tất cả chúng tôi và bắt chúng tôi giúp họ. Vì vậy, chúng tôi đã đưa ra một vài điều trong sự quái dị của ERP / CRM / CMS được phát triển tại nhà của chúng tôi và trải nghiệm tất cả sự khủng khiếp của các kết nối liên tục trong tay. Chúng tôi đã mất nhiều tuần để theo dõi tất cả các vấn đề nhỏ tinh tế và hành vi kỳ quái xảy ra dường như ngẫu nhiên. Nó chỉ ra rằng những lỗi nghiêm trọng một lần một tuần mà người dùng của chúng tôi siêng năng vắt kiệt khỏi ứng dụng của chúng tôi đã để lại các bảng bị khóa, giao dịch bị bỏ rơi và các trạng thái đáng tiếc khác.
Câu chuyện thổn thức này có một điểm: Nó đã phá vỡ những thứ mà chúng ta không bao giờ mong muốn phá vỡ, tất cả đều nhân danh hiệu suất. Sự đánh đổi là không đáng, và chúng tôi háo hức chờ đợi ngày chúng tôi có thể quay lại các kết nối bình thường mà không có sự náo loạn từ người dùng của chúng tôi.