MỤC LỤC
Mặt khác cũng có thể dùng nhiều hệ quản trị CSDL trong cùng một hệ thống để khai thác các thế mạnh của chúng, ví dụ có thể dùng Lotus Notes trên các Client (giao diện ngời dùng thân thiện, u việt về truyền thông, xử lý tốt văn bản) và kết nối vào CSDL Oracle trên Server (tính bảo mật cao, đa ngời dùng, quản lý tốt các giao tác-Transaction). Ngôn ngữ SQL còn có khả năng thực hiện đợc những câu hỏi phức tạp mà các dạng ngôn ngữ khác không đáp ứng đợc và một câu lệnh SQL có thể thay thế cho một tập hợp các câu lệnh lập trình CSDL thông thờng.
Chú ý rằng phân tán có nghĩa là dữ liệu không c trú trên một vị trí (khác với CSDL tập trung, đơn lẻ) và phải có tơng quan logic với nhau (dữ liệu có một số các thuộc tính ràng buộc chúng với nhau) chứ không phải là một tập hợp CSDL cục bộ hoặc các tệp c trú tại các vị trí khác nhau trong một mạng máy tính. Xuất phát từ chính yêu cầu thực tế về tổ chức và kinh tế: Trên thực tế nhiều tổ chức là không tập trung, dữ liệu ngày càng lớn và phục vụ cho đa ngời dùng nằm phân tán vì vậy CSDL phân tán là thích hợp với cấu trúc tự nhiên của các tổ chức.
Điều đáng quan tâm hơn là các biểu thức con chung có tần số xuất hiện lớn đ- ợc biểu diễn trong các View (khung nhìn) của các ngời dùng vì để thực hiện các câu hỏi đó cần thay thế một biểu thức cố định vào cho View. Một khi cần chọn trình tự thực hiện các phép tính trong biểu thức hoặc chọn một trong hai đối số của một phép tính hai ngôi cần tính toán xem chi phí thực hiện các phép tính đó (thờng là số phép tính, thời gian, kích thớc bộ nhớ theo một.
Trong bảng Index thì mỗi cột ứng với một đề mục trong cột Index, ví dụ cột KhuVực=KV1 thì giá trị 1 ứng với hàng của Bảng SinhViên có KhuVực=KV1, ng- ợc lại là giá trị 0. • Trong một Cluster thì mỗi giá trị khoá Cluster cũng là một thành phần của các hàng và duy nhất chỉ có một giá trị đợc lu trữ cho một khối của Cluster thay mỗi hàng phải chứa giá trị đó.
Điều kiện có thể áp dụng đợc phơng pháp kết nối này là hai nguồn dữ liệu phải kết nối theo kiểu bằng chứ không thể là kiểu kết nối khác. Oracle sẽ tiến hành sắp xếp mỗi nguồn dữ liệu theo cột đợc sử dụng trong điều kiện kết nối nếu nh nguồn dữ liệu cha đợc sắp xếp bởi thao tác trớc đó.
Phơng thức này sẵn dùng khi mà điều kiện kết nối các bảng đều đợc chứa trong cùng một nhóm (Cluster) và nếu điều kiện kết nối trong mệnh đề FROM thoả mãn mỗi cột trong kết nối là khoá của bảng này và là cột trong bảng kia. Nếu câu lệnh chỉ sử dụng giá trị các trờng Index thì các giá trị này sẽ đợc lấy trực tiếp từ bảng Index thay vì lấy từ bảng dữ liệu còn trong trờng hợp là các giá trị khác thì sẽ truy nhập ROWID tìm đợc từ bảng Index.
Sau khi dữ liệu đợc xử lý ở mỗi khối thì sẽ trả lại một tập hợp các hàng (đợc gọi là nguồn dữ liệu Row Source) cho khối ở mức trên và nếu là khối trên cùng thì sẽ trả lại cho ngời dùng hoặc chơng trình thực hiện câu lệnh. Nói chung thì các bớc chỉ yêu cầu truy nhập một hàng từ bảng là truy nhập duy nhất trực tiếp từ bảng, từ Index, từ kết nối Nested-Loop và từ bộ lọc còn các bớc yêu cầu tất cả các hàng hàng đồng thời là sắp xếp, kết nối bằng sắp xếp trộn, các hàm làm việc với nhóm hàng và phép hợp các tập hợp.
• Kết hợp View vào trong câu lệnh: View thực chất là một câu lệnh SELECT, do vậy nếu thực hiện một câu lệnh SELECT trên View thì dữ liệu sẽ bị duyệt hai lần. • Chọn thứ tự của kết nối: Nếu câu lệnh sử dụng kết nối nhiều hơn hai bảng thì Oracle sẽ tiến hành tìm ra cặp kết nối thứ nhất, rồi cặp tiếp theo ..v.v.
Còn nếu sử dụng luật Cost-based thì Oracle sẽ đánh ớc lợng “giá” phải trả ứng với mỗi câu lệnh và sẽ quyết định chọn câu lệnh nào sẽ đợc thực hiện. Để chuyển một câu lệnh phức hợp thành một câu lệnh kết nối bất cứ khi nào nếu nó đảm bảo đợc rằng kết quả của hai câu lệnh nh nhau.
Để thực hiện những câu lệnh kiểu này, Oracle thực hiện View để lọc ra một tập các hàng, sau đó thực câu lệnh trên View nh đối với một hàng. CREATE VIEW NVPhòng AS SELECT M NhânViên, Avg(Lã ơng) LơngTB, MIN(Lơng) MinLơng, MAX(Lơng) MaxLơng FROM NhânViên GROUP BY M Phòng;ã.
• ALL_ROWS: phơng thức tối u cost-based sẽ đợc thực hiện cho tất cả các câu lệnh SQL bất kể thông tin trạng thái trong từ điển dữ liệu sao cho nguồn tài nguyên sử dụng là tối thiểu để hoàn thành câu lệnh. • FIRST_ROW: Phơng thức tối u cost-based đợc sử dụng cho tất cả các câu lệnh SQL sao cho thời gian đáp ứng là nhỏ nhất (nguồn tài nguyên sử dụng để trả lại hàng đầu tiên trong kết quả là tối thiểu).
• RULE: giá trị sẽ làm cho Oracle tiến hành tối u tất cả các câu lệnh SQL dựa vào phơng thức rule-based bất chấp có thông tin trạng thái về các bảng trong từ. ❑ Nếu nh sử dụng phơng thức tối u ớc lợng giá mà không có thông tin trạng thái về một vài bảng thì Oracle sẽ sử dụng thông tin nội bộ nh là số khối dữ liệu truy nhập các bảng.
Oracle sẽ chọn số thao tác kết nối Nested-Loop là tối đa nếu bảng nội đợc truy nhập bằng Index và do vậy việc truy nhập bảng nội nhiều lần sẽ đạt hiệu quả hơn. - Một vùng nhớ sắp xếp có kích thớc nhỏ sẽ làm tăng giá phải trả cho kết nối sắp xếp bởi vì lúc đó việc sắp xếp sẽ cần nhiều thời gian của CPU hơn và lần truy xuất (I/O) hơn.
Nếu số lợng khó đọc đồng thời trong một lần truy xuất đĩa(I/O) là lớn thì một truy nhập qua Index của bảng nội sẽ kém hiệu quả hơn so với duyệt toàn bộ. (đờng, phố), WARDS (phờng), SUBAREA (tiểu khu), DISTRICTS (quận), BRANCH (chi nhánh) sau đó thực hiện phép chiếu trên cột BRANCH.name.
- Với độ lớn Library cache thích hợp khi mà tỉ lệ số lần thủ tục và hàm trong th viện đợc thực hiện (PINS) chia cho số lần hàm và thủ tục đó phải nạp từ đĩa (RELOADS). • Điều chỉnh độ lớn của Database Bufer Cache: Thành phần này đợc Oracle chia làm nhiều Block mỗi Block có kích thớc cố định tuỳ thuộc hệ điều hành và xác định qua tham số db_block_size trong Parameter File.
Kết quả thực hiện Database Center là 64.517194 %, điều này chứng tỏ vùng bộ nhớ dành cho Database Bufer Cache đủ tốt và nên dành thêm vùng bộ nhớ từ Share Pool sang. Không nên tạo Index cho các cột chứa quá ít giá trị khác nhau nh YES và NO, tuy nhiên nếu các câu lệnh thờng xuyên làm việc với một giá trị trị giả sử là giá trị YES thì việc tạo Index lại tăng tốc độ thực hiện.
Nh vậy thực tế là qua hai quá trình tối u thì khi tra cứu thông tin về Văn bản pháp qui do Văn phòng chính phủ và UBND các tỉnh ban hành bằng Web trên mạng thì thời gian đáp ứng từ 41.43 giây xuống xấp xỉ 1.2 giây. Một số ví dụ khác về quá trình tối u sẽ đợc giới thiệu trong phần tối u hoá Hệ tính hoá đơn nớc và quản lý khách hàng của công ty cấp nớc Thành phố Hồ Chí Minh (WSC).
Nội dung chính yếu của chơng này là đa ra những cách thức cụ thể tối u hoá câu lệnh SQL trong Hệ tính hoá đơn và quản lý khách hàng công ty cấp nớc Thành phố Hồ Chí Minh. Trong phần B sẽ giới thiệu phơng pháp tìm những câu lệnh cha tối u và trong phần C là các ví dụ thực nghiệm đã đợc sử dụng trong Hệ tính hoá đơn và quản lý khách hàng để nâng cao tốc độ xử lý cho phần mềm này.
Việc xây dựng một phần mềm quản lý khách hàng và tính hoá đơn nớc cho công ty cần thiết phải có một mạng máy tính cục bộ và quan trọng hơn là phải có Hệ quản trị CSDL trên mạng. Hệ quản lý hoá đơn nớc đợc thiết kế hớng chức năng gồm bốn phân hệ thành phần trong đó có hơn 120 module chơng trình, 70 module làm báo cáo, 30 Database triggers, 83 thủ tục và hàm.
Trong các cột của cây phân tích lệnh có thông tin số lần thực hiện câu lệnh (count), thời gian sử dụng CPU (CPU), thời gian trong các giai đoạn thực hiện câu lệnh (Elapsed), số lợng khối dữ liệu đọc từ đĩa (Disk), số bộ đệm cần nhận (Query), số bộ đệm hiện có (Current), số hàng đợc truy xuất (Rows). Để có thể tăng tốc độ thực hiện của chơng trình, các câu lệnh thực hiện trong quá trình tính hoá đơn đã đợc phân tích và kết quả cho thấy trạng thái mỗi hoá đơn đợc tính xong sẽ đợc cập nhật vào bảng hoá đơn (Bills) theo mã khách hàng (cust_id), tuy nhiên bảng Bills lại thiếu Index trên cột này vì.
Với mỗi hàng thuộc bảng CUTOMERS đều phải duyệt lần lợt ứng với bảng SNAP$_ABC$SG. FROM SNAP$_CUSTOMERS$SG, SNAP$_ABC$SG WHERE STATUS=1 AND ID=CUST_ID and BC_CODE='A5' AND BRANCH_ID=3 AND ACTIVE=1;.
Điều này rất bất hợp lý vì toàn bộ các văn bản của một địa phơng đều có cùng một mã địa phơng do đó phải kết nối toàn bộ các văn bản của địa phơng đó, trong khi đó nếu thực hiện phép chọn trớc thì chỉ lấy ra duy nhất một văn bản rồi kết nối với danh mục địa phơng để lấy ra tên địa phơng đã phát hành văn bản đó. Nh vậy sau khi kết hợp cả hai phơng pháp trên thì số lần duyệt để truy xuất tới văn bản sẽ là ít nhất (qua index trực tiếp) và số lợng các hàng tham gia vào kết nối là nhỏ nhất (một hàng) do đó thời gian tăng lên rất nhiều lần vì thao tác kết nối từ n văn bản (toàn bộ văn bản của một địa phơng) còn lại chỉ kết nối một văn bản đã.