When an Oracle system hang up

Mấy hôm trước ông bạn thân nhờ mình xem hộ cho hệ thống đang chạy trên nền Oracle 10g + Unix. Ông bạn nói lúc bình thường thì không sao, nhưng đợt này nhiều người truy cập (k có số lượng user cụ thể nhưng chắc trên 1K) hệ thống cứ treo cứng luôn và không làm được bất cứ việc gì cả. Mình có hỏi ông bạn cụ thể thì các user kia vào làm gì thì ông bạn nói chủ yếu là register và search trong một module của hệ thống. Điều kiện là không được sửa đổi application code đang running

Suy nghĩ đầu tiên bao giờ cũng là code xấu. Đây cũng chính là vấn đề cốt lõi và cũng là yếu tố quan trọng nhất trong Performance Tuning, tuy nhiên có cái ràng buộc ở trên nên mình sẽ no-table vấn đề này. Lúc ông bạn nói, mình nghĩ ngay một số vấn đề:

  • Cảm nhận đầu tiên của mình là về Oracle connection. Mình đoán là hệ thống của bạn mình đang sử dụng dedicated mode vì nó phổ biển và đơn giản ít phải configure. Dedicated server là cơ chế ánh xạ 1- giữa client  connection và server process. Khi có 1 client connection hệ thống sẽ tự động sịnh ra một server process để đáp ứng. Số lượng user lớn dẫn đến số lượng server process lớn. Mà mỗi server process đều chiếm 1 lượng tài nguyên nhất định cho nên đến một mức nào đó sẽ làm cho hệ thống overload -> treo
  • Cảm nhận tiếp theo là về resource của user. Nhiều hệ thống ở mình sử dụng cơ chế 1 power user, nghĩa là thực tế chỉ có 1 user của Oracle, còn các user A, B, C … kia chỉ là các bản ghi trong bảng user của ứng dụng. Oracle user này thường có quyền rất mạnh (thậm chí DBA) và được gán resource rất lớn. Kết hợp với yếu tố trên thì treo là điều dễ hiểu.

Tất nhiên sẽ còn 1 số vấn đề nữa nhưng theo mình 2 cái trên là đủ cho hệ thống treo. Giải pháp của mình đưa ra là

  • Xem xét chuyển database về cơ chế shared-server. Tất nhiên cũng phải thêm 1 chút cấu hình, tuy nhiên, nó đều có guide book đầy đủ, cứ làm theo là OK. Mình cũng nói thêm qua 1 chút về Shared Server. Shared server, there is a many-to-one relationship many clients to a shared server, rất thích hợp cho các hệ thống OLTP nhưng rất không phù hợp với data warehouse. Nó sẽ dùng dispatcher để quay vòng các server process. Số lượng server process là limit nên hệ thống có thể chậm chứ k treo, đó là điều chắc chắn.
  • Hạn chế resource của user. Có nhiều cách để hạn chế: thông qua profile, giảm số lượng process/thread cho user, gán quota … Và nếu có thể thì nên tạo riêng 1 Oracle user dành cho các user kiểu này. Và thực sự nếu có money thì khi có những yêu cầu đột biến kiểu này trong 1 thời gian ngắn thì có thể xem xét tăng thêm database phụ , dùng các cơ chế synchronize data, i.e. replicate, mview để giảm tải cho server chính

Ông bạn nói sẽ xem xét thử nghiệm. Mình thì tin chắc rằng hệ thống sẽ không bị treo như trước nữa.

18 Aug 2010

HN

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: