Trong cơ sở dữ liệu sản xuất được nâng cấp gần đây của tôi, tôi thấy một số câu lệnh SQL hiện đang gặp phải sự chờ đợi cao đối với sự kiện “thay đổi kích thước bộ mô tả không đồng bộ”. Gần đây tôi đã nâng cấp từ 11.1.0.7 lên 11.2.0.2 và các câu lệnh SQL không bao giờ chờ đợi sự kiện này hiện đang bị bắt.
Oracle 11.2 đã thay đổi một chút cách cơ sở dữ liệu và nhân hệ điều hành thực hiện các lệnh gọi I / O không đồng bộ. Điều đang xảy ra là có một số bộ mô tả I / O không đồng bộ để có thể xử lý các lệnh gọi I / O không đồng bộ. Khi số lượng lệnh gọi I / O không đồng bộ tăng lên, số lượng bộ mô tả cũng tăng theo. Khi số lượng lệnh gọi I / O không đồng bộ giảm, số lượng bộ mô tả cũng giảm theo cách tương tự.
Trước khi Oracle có thể tăng số lượng bộ mô tả, nó phải đợi tất cả các quy trình hiện đang thực hiện I / O không đồng bộ để hoàn thành các lệnh gọi I / O của chúng. Hành động khủng khiếp này thực sự giết chết phần “không hoạt động” của I / O! Khi tất cả các quy trình đã hoàn thành các lệnh gọi I / O ansych của chúng, Oracle sau đó có thể sửa đổi các bộ mô tả lên hoặc xuống tùy thuộc vào khối lượng công việc.
Nếu quy trình của bạn vừa mới hoàn thành xong I / O không đồng bộ của nó, trước khi nó có thể thực hiện một lệnh gọi I / O không đồng bộ khác, nó phải đợi Oracle sửa đổi số lượng bộ mô tả. Như vậy, bạn đang đợi sự kiện chờ “thay đổi kích thước bộ mô tả không đồng bộ”.
Đây có vẻ là Lỗi 9829397 và bạn có thể tải xuống bản vá cho nó từ Metalink. Sự cố này đã được khắc phục trong 11.2.0.3 nên nó chỉ xuất hiện trong 11.2.0.1 và 11.2.0.2. Một cách giải quyết là vô hiệu hóa Asynch I / O, nhưng đối với tôi thì cách giải quyết đó rất không mong muốn. Người ta cũng có thể giảm sự xuất hiện của sự kiện chờ này bằng cách giảm I / O trực tiếp của họ và điều chỉnh các câu lệnh SQL của họ.