Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 46 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
46
Dung lượng
272,63 KB
Nội dung
15 bài thực hành tốt nhất về hiệu năng pureXML trong DB2 Matthias Nicola, Chuyên gia về hiệu năng CSDL, IBM Silicon Valley Laboratory Tóm tắt: DB2 9 giới thiệu sự hỗ trợ pureXML, có nghĩa là dữ liệu XML được lưu trữ và được truy vấn theo định dạng phân cấp vốn có của nó. Để truy vấn dữ liệu XML, DB2 cung cấp hai ngôn ngữ, SQL/XML và XQuery. Ngoài ra, DB2 9 có các khả năng lí tưởng về lập chỉ mục XML và hỗ trợ cho việc xác nhận tính hợp lệ của Lược đồ XML (XML Schema). Trong khi hầu hết các hướng dẫn thi hành hiện có cho DB2 cũng áp dụng cho dữ liệu XML, bài viết này cung cấp thêm các lời khuyên hiệu quả cho XML cụ thể. Bài viết này đã được cập nhật cho DB2 9.5. [26 tháng 5 năm 2009: mã hiệu chỉnh trong các liệt kê 12 và 13 Biên tập.] Giới thiệu Hỗ trợ pureXML trong DB2 9 cung cấp các khả năng hiệu quả và linh hoạt để quản lý dữ liệu XML của bạn. Hiệu năng là một sự ưu tiên cao cho nhiều ứng dụng XML; và các DBA, cũng như các nhà thiết kế ứng dụng, có thể chia sẻ khả năng của họ để đảm bảo hiệu năng tốt. Đầu tiên, có tất cả các hướng dẫn thực thi DB2 truyền thống cho các cấu hình cân bằng về CPU/bộ nhớ/đĩa, các vùng bảng và điều chỉnh vùng bộ đệm, khóa, ghi chép, các kế hoạch thực hiện truy vấn và v.v. Tất cả các chủ đề này được trình bày trong các bài viết DB2 trước đó (xem Tài nguyên) và vẫn có liên quan khi bạn quản lý dữ liệu XML trong DB2. May mắn thay, một số trong các vấn đề này được các khả năng tự nhiên của DB2 xử lý như là quản lý lưu trữ tự động và quản lý bộ nhớ tự điều chỉnh. Chúng cung cấp các mức hiệu năng cao cho nhiều ứng dụng và đòi hỏi rất ít sự can thiệp thủ công. Nhưng các ứng dụng XML với các yêu cầu thực thi tích cực có thể được lợi ích từ các khía cạnh phụ về hiệu năng. Bài viết này tập trung vào các tình huống như vậy, đưa ra những lời khuyên và các hướng dẫn để đạt được hiệu năng tối đa của các ứng dụng XML có liên quan trong DB2 9. Dưới đây là 15 lời khuyên hiệu năng XML (không theo thứ tự cụ thể) mà chúng tôi thảo luận và minh họa trong bài viết này. 15 lời khuyên này bao gồm nhiều lĩnh vực, nhưng kinh nghiệm cho thấy rằng các ứng dụng với các vấn đề hiệu năng thường chỉ cần áp dụng một hoặc hai trong số các lời khuyên này để đạt Lời khuyên được hiệu năng mong muốn. Lời khuyên 1: Sáng suốt lựa chọn độ chi tiết của tài liệu XML của bạn. Lời khuyên 2: Sử dụng DMS và các trang lớn hơn để hiệu năng XML tốt hơn. Lời khuyên 3: Khai thác các tùy chọn lưu trữ cho XML: nội tuyến, nén hoặc một vùng bảng riêng biệt. Lời khuyên 4: Cách cấu hình DB2 cho phép chèn nhanh một số lượng lớn dữ liệu XML. Lời khuyên 5: Sử dụng các yếu tố giám sát đột xuất để kiểm tra hiệu năng XML. Lời khuyên 6: Hãy tăng cường xác nhận tính hợp lệ của lược đồ XML. Lời khuyên 7: Trong các biểu thức XPath, sử dụng các đường dẫn cụ thể đầy đủ càng nhiều càng tốt. Lời khuyên 8: Định nghĩa các chỉ mục thiên về XML và tránh đánh chỉ mục tất cả mọi thứ. Lời khuyên 9: Đặt các vị từ lọc tài liệu trong XMLEXISTS thay cho XMLQUERY. Lời khuyên 10: Sử dụng các dấu ngoặc vuông [] để tránh các vị từ Boolean trong XMLEXISTS. Lời khuyên 11: Sử dụng RUNSTATS để thu thập các số liệu thống kê cho dữ liệu và chỉ mục XML. Lời khuyên 12: Làm thế nào để sử dụng các khung nhìn xuất bản SQL/XML để trưng ra dữ liệu quan hệ như XML. Lời khuyên 13: Sử dụng các khung nhìn XMLTABLE để trưng ra dữ liệu XML trong định dạng quan hệ như thế nào. Lời khuyên 14: Đối với các truy vấn ngắn hoặc các ứng dụng OLTP, sử dụng các câu lệnh SQL/XML với các dấu tham số. Lời khuyên 15: Tránh chuyển đổi trang mã trong khi chèn và lấy ra XML. Trong cuộc thảo luận về các lời khuyên hiệu năng này, chúng tôi giả định rằng bạn đã quen thuộc với các công việc thực hành hiệu năng và quản trị DB2 cơ bản cũng như với các khái niệm cơ bản về sự hỗ trợ pureXML của DB2. Ví dụ, bạn nên biết về các cột XML, các chỉ mục XML và làm thế nào để truy vấn dữ liệu XML với SQL/XML và XQuery. Tất cả những điều kiện cần trước này được trình bày trong bài viết được xuất bản trước đó trên developerWorks (xem Tài nguyên). Các lời khuyên hiệu năng XML của DB2 Lời khuyên 1: Sáng suốt lựa chọn độ chi tiết của tài liệu XML của bạn Khi bạn thiết kế ứng dụng XML và cấu trúc tài liệu XML của bạn, nói cụ thể, bạn có thể có một sự lựa chọn để xác định dữ liệu nghiệp vụ nào được giữ cùng nhau trong một tài liệu XML. Ví dụ, trong bảng bộ phận của chúng tôi dưới đây, chúng tôi sử dụng một tài liệu XML cho mỗi bộ phận (độ chi tiết trung bình). Đây là một sự lựa chọn có lý nếu một bộ phận có độ chi tiết nổi trội hơn mà ứng dụng của chúng tôi truy cập và xử lý dữ liệu tại đó. Theo cách khác, chúng tôi có thể có quyết định kết hợp nhiều chi nhánh bộ phận hoặc nhiều bộ phận vào một tài liệu XML duy nhất, ví dụ: tất cả những người thuộc về một đơn vị (độ chi tiết thô). Điều này, tuy nhiên, là sự tối ưu nhỏ nếu chúng ta thường xử lý chỉ một bộ phận vào một lúc. Bảng 1. Tạo bảng dept( unitID char(8), deptdoc xml) unitID deptdoc WWPR <dept deptID='PR27'> <employee id='901'> <name>Jim Qu</name> <phone>408 555 1212</phone> </employee> <employee id='902'> <name>Peter Pan</name> <office>216</office> </employee> </dept> WWPR <dept deptID='V15'> <employee id='673'> <name>Matt Foreman</name> <phone>416 891 7301</phone> <office>216</office> </employee> <description>This dept supports sales world wide</description> </dept> S-USE Chúng tôi cũng có thể đã quyết định phải có một tài liệu XML cho mỗi nhân viên (độ chi tiết cao), với một thuộc tính "dept" cho mỗi nhân viên để cho biết nhân viên đó thuộc về bộ phận nào. Đây sẽ là một sự lựa chọn rất tốt nếu các nhân viên tự mình sử dụng các đối tượng nghiệp vụ quan tâm, mà các đối tượng này thường được các nhân viên khác trong cùng một bộ phận truy cập và xử lý một cách độc lập. Nhưng, nếu ứng dụng đó thường đòi hỏi cùng lúc tất cả các nhân viên trong một bộ phận, tốt hơn là để một tài liệu XML cho mỗi bộ phận. Cụ thể là, việc xử lý theo bó nhiều đối tượng nghiệp vụ độc lập trong một tài liệu duy nhất là không nên. DB2 sử dụng các chỉ mục trên dữ liệu XML để lọc mức cho mỗi tài liệu. Vì vậy, độ chi tiết tài liệu XML của bạn càng tốt hơn, thì lợi thế tiềm năng của bạn càng cao do việc truy cập theo chỉ mục. Ngoài ra, nếu ứng dụng của bạn sử dụng một trình phân tích cú pháp DOM để tiêu thụ XML lấy ra từ DB2, các tài liệu nhỏ sẽ cho phép hiệu năng tốt hơn. Liên quan đến thiết kế tài liệu XML, một câu hỏi thường gặp là khi nào sử dụng các thuộc tính so với các phần tử và lựa chọn đó ảnh hưởng đến hiệu năng ra sao. Đây là một câu hỏi về mô hình hóa dữ liệu hơn là một câu hỏi về hiệu năng. Như vậy, câu hỏi này cũng cũ như là SGML, tiền thân của XML và người ta đã tranh cãi sôi nổi mà không đạt được sự đồng thuận nào. Tuy nhiên, một thực tế quan trọng đi kèm là các phần tử XML linh hoạt hơn các thuộc tính bởi vì chúng có thể được lặp lại và lồng nhau. Ví dụ, trong các tài liệu của bộ phận chúng tôi, chúng tôi sử dụng một phần tử "phone" để cho phép chúng tôi có nhiều lần xuất hiện của "phone" nếu một nhân viên có nhiều số điện thoại. Nó cũng được mở rộng trong trường hợp sau này chúng tôi cần phải ngắt các số điện thoại vào trong các phân đoạn, nghĩa là phần tử "phone" có thể có các phần tử con cho mã nước, mã vùng, mã mở rộng, v.v. Nếu "phone" đã là một thuộc tính của các phần tử của nhân viên (employee), thì sau đó nó có thể tồn tại chỉ một lần cho mỗi nhân viên và chúng tôi cũng không thể thêm vào nó các phần tử con, thuộc tính phone có thể cản trở sự tiến hóa của lược đồ theo thời gian. Mặc dù bạn có thể mô hình hóa tất cả các dữ liệu của bạn mà dùng thuộc tính nào, chúng có thể là một lựa chọn rất trực quan cho các mục tin đã được biết trước là không bao giờ lặp lại (theo phần tử), cũng không có bất kỳ các trường con nào. Các thuộc tính làm cho XML ngắn hơn một chút vì chúng chỉ có một thẻ đơn, khác với các phần tử có một thẻ bắt đầu và một thẻ kết thúc. Trong DB2, các thuộc tính có thể được sử dụng trong các truy vấn, các vị từ và các định nghĩa chỉ mục, dễ như phần tử. Do các thuộc tính ít có khả năng mở rộng hơn so với các phần tử, nên DB2 có thể áp dụng việc tối ưu hóa lưu trữ và truy cập nào đó. Điều này cần được xem là lợi điểm về hiệu năng, hơn việc chỉ khích lệ chuyển đổi các thuộc tính thành các phần tử, đặc biệt khi các khía cạnh mô hình hóa dữ liệu thực sự gọi các phần tử. Tóm lại, hãy chọn độ chi tiết của tài liệu XML của bạn đáp ứng độ chi tiết truy cập nổi trội đã dự liệu trước. Khi có nghi ngờ, tốt hơn là đi theo hướng độ chi tiết cao hơn và các tài liệu XML nhỏ hơn. Lời khuyên 2: Sử dụng DMS và các trang lớn hơn để hiệu năng XML tốt hơn DMS - Các vùng bảng quản lý cơ sở dữ liệu đảm bảo hiệu năng cao hơn so với SMS - các vùng bảng quản lý hệ điều hành. Điều này đúng với dữ liệu quan hệ và thậm chí cũng đúng cho việc truy cập đọc và viết XML. Trong DB2 9, theo mặc định các vùng bảng mới được tạo ra là DMS. Người ta cũng đề xuất sử dụng các vùng bảng DMS có vùng lưu trữ tự động sao cho các vùng chứa DMS phát triển khi cần thiết mà không cần có sự can thiệp thủ công. Nếu một tài liệu XML là quá lớn không vừa một trang duy nhất trong một vùng bảng, thì DB2 sẽ phân chia tài liệu thành nhiều vùng rồi sẽ lưu trữ trên nhiều trang. Điều này là trong suốt đối với ứng dụng của bạn và cho phép DB2 XML xử lý các tài liệu XML đến sự ràng buộc trong giới hạn 2GB cho mỗi tài liệu. Nói chung, số các vùng (phân chia) cho mỗi tài liệu càng thấp thì hiệu năng càng tốt, đặc biệt đối với việc chèn và lấy ra tài liệu đầy đủ. Nếu một tài liệu không khít trên một trang, số lượng phân chia cho mỗi tài liệu phụ thuộc vào kích thước trang (4KB, 8KB, 16KB hoặc 32KB). Các kích thước trang của vùng bảng của bạn càng lớn thì số lượng phân chia tiềm tàng cho mỗi tài liệu càng thấp. Ví dụ, giả sử một tài liệu đã cho bắt đầu chia thành bốn mươi trang 4KB. Sau đó, lưu trữ cùng một tài liệu này chỉ trên hai mươi trang 8KB, hoặc mười trang16KB hoặc năm trang 32KB, tương ứng. Nếu các tài liệu XML này nhỏ hơn đáng kể so với kích thước trang đã chọn, thì sẽ không có vùng nào bị lãng phí do có thể lưu trữ nhiều tài liệu nhỏ trên một trang duy nhất. Theo kinh nghiệm, chọn một kích thước trang cho dữ liệu XML không nhỏ hơn hai lần kích thước tài liệu dự kiến trung bình của bạn, với giả thuyết lớn nhất là 32KB. Nếu bạn sử dụng một kích thước trang đơn cho dữ liệu quan hệ và dữ liệu XML hoặc cho dữ liệu và các chỉ mục, một kích thước trang 32KB có thể mang lại lợi ích cho dữ liệu XML, nhưng hơi bất lợi cho việc truy cập dữ liệu và chỉ mục quan hệ. Trong trường hợp như vậy, các trang 16KB hoặc 8KB có thể là một lựa chọn tốt hơn để hoạt động tốt cho cả hai. Lời khuyên 3: Khai thác các tùy chọn lưu trữ cho XML: nội tuyến, nén hoặc một vùng bảng riêng biệt Hãy xem xét các bảng mẫu sau đây để thảo luận về các tùy chọn lưu trữ cho dữ liệu XML. Bảng này chứa dữ liệu quan hệ và dữ liệu XML: Liệt kê 1. Bảng mẫu với dữ liệu XML và dữ liệu quan hệ create table product(pid bigint, name varchar(20), brand varchar(35), category integer, price decimal, description XML); Với định nghĩa bảng này, theo mặc định dữ liệu XML và dữ liệu quan hệ của bảng được lưu trữ mặc định trong cùng một vùng bảng. Điều này có nghĩa là chúng sử dụng cùng kích thước trang và được đệm trong cùng một vùng bộ đệm. Trong vùng bảng, dữ liệu quan hệ được lưu giữ trong đối tượng DAT, trong khi dữ liệu XML nằm trong đối tượng XDA. Điều này là do các tài liệu XML, như các LOB, có thể là quá lớn không khít trong một hàng đơn trên một trang dữ liệu của bảng. Sự bố trí mặc định này đảm bảo hiệu năng tốt cho hầu hết các kịch bản ứng dụng. Nếu bạn đã thực hiện một sự phân tích hiệu năng và thấy rằng bạn cần phải có một kích thước trang lớn cho dữ liệu XML trừ một trang có kích thước nhỏ cho dữ liệu quan hệ hay các chỉ mục, bạn có thể sử dụng các vùng bảng riêng biệt để đạt được điều này. Khi bạn định nghĩa một bảng, bạn có thể hướng dữ liệu "dài" vào trong một vùng bảng riêng biệt có kích thước trang khác nhau. Dữ liệu dài bao gồm các dữ liệu LOB và dữ liệu XML. Ví dụ sau định nghĩa hai vùng bộ đệm và hai vùng bảng, một thứ có các trang 4KB và 32KB. (Lưu ý rằng một vùng bảng luôn luôn đòi hỏi phải có một vùng bộ đệm có kích thước trang vừa khít). Bảng sản phẩm ("product") được gán cho vùng bảng "relData" có các trang 4KB. Trong vùng bảng đó lưu trữ tất cả các cột của nó, trừ cột mô tả ("description") XML, lưu trữ trên các trang 32KB trong vùng bảng "xmldata". Liệt kê 2. Dữ liệu XML và dữ liệu quan hệ trong vùng bảng riêng biệt và các vùng bộ đệm create bufferpool bp4k pagesize 4k; create bufferpool bp32k pagesize 32k; create tablespace relData pagesize 4K managed by automatic storage bufferpool bp4k; create tablespace xmlData pagesize 32K managed by automatic storage bufferpool bp32k; create table product(pid bigint, name varchar(20), brand varchar(35), category integer, price decimal, description XML) in relData [...]... rằng nó thực sự cung cấp một lợi ích hiệu năng đáng giá Sử dụng nội tuyến và nén để giảm tiêu thụ vùng lưu trữ và tăng hiệu năng I/O Lời khuyên 4: Đặt cấu hình DB2 để chèn nhanh số lượng lớn các dữ liệu XML như thế nào DB2 9 hỗ trợ hai lựa chọn để di chuyển dữ liệu XML từ một hệ thống tệp vào trong một bảng DB2: chèn và nhập khẩu Chèn và nhập khẩu có các đặc điểm tương tự như nhau từ hiệu năng và quan... đầu vào Đối với các hướng dẫn thực thi lệnh chèn, xem bài viết "Các lời khuyên để cải thiện việc thực thi lệnh INSERT trong DB2 UDB" [xem Tài nguyên] Tóm lại, lệnh chèn truyền thống và việc điều chỉnh hiệu năng ghi log là tốt cho việc chèn và nhập khẩu XML Bạn có thể chạy các phiên nhập khẩu song song, nếu bạn thêm mệnh đề ALLOW WRITE ACCESS cho mỗi lệnh nhập khẩu Trong DB2 9.5, sử dụng nạp vào thay... DB2 của bạn nhận được dữ liệu XML từ các nguồn không đáng tin cậy và bạn cần phải đảm bảo tuân thủ lược đồ ở mức DB2, thì bạn cần phải dành thêm một số chu kỳ CPU cho việc đó Tóm lại, để việc chèn đạt hiệu năng cao, tránh thực hiện xác nhận tính hợp lệ của lược đồ trong DB2 nếu nó không thực sự cần thiết Lời khuyên 7: Trong các biểu thức XPath, sử dụng các đường dẫn cụ thể đầy đủ càng nhiều càng tốt. .. trong các hệ thống sản xuất, nhưng có thể có ích khi tạo dữ liệu khởi đầu cho một bảng trống Coi chừng NLI ngăn cản các hoạt động chèn/nhập khẩu tương tranh vào trong một bảng đích và hoạt động song song có thể mang lại hiệu năng cao hơn NLI Nếu bạn sử dụng nhập khẩu, một giá trị nhỏ cho tham số COMMITCOUNT có xu hướng hại đến hiệu năng Việc cam kết mỗi một 100 hàng hoặc nhiều hơn sẽ thực hiện tốt. .. này chính xác về ngữ nghĩa (theo chuẩn SQL/XML) và phải được trả về nếu truy vấn được viết theo cách nó có 4 Hiệu năng của truy vấn này sẽ không tốt Đầu tiên, không thể sử dụng một chỉ mục có thể tồn tại trên /customerinfo/phone vì truy vấn này không được phép loại bỏ bất kỳ hàng nào Thứ hai, trả về nhiều hàng rỗng làm cho truy vấn này chậm không cần thiết Để giải quyết các vấn đề hiệu năng và nhận... dụng nạp vào thay cho nhập khẩu Lời khuyên 5: Sử dụng các yếu tố giám sát đột xuất để kiểm tra hiệu năng XML Cho dù bạn đang kiểm tra lợi ích của các kích thước trang khác hoặc các lĩnh vực khác về hiệu năng XML, các cơ hội là bạn muốn sử dụng giám sát đột xuất DB2 như với dữ liệu quan hệ Bạn sẽ thấy rằng DB2 9 cung cấp các yếu tố giám sát đột xuất cho vùng bộ đệm mới cho dữ liệu XML mà nó khít với... lược đồ bổ sung thêm các chú thích về kiểu từ lược đồ này đến mỗi phần tử và thuộc tính XML và các kiểu này vẫn tiếp tục tồn tại trong vùng lưu trữ XML của DB2 Ví dụ, nếu một lược đồ XML định nghĩa rằng các ID của nhân viên trong bảng dept của chúng tôi (đã chỉ ra trong Lời khuyên 1) là các số nguyên và các tài liệu được xác nhận hợp lệ dựa vào lược đồ đó, sau đó DB2 nhớ trong mỗi tài liệu mà các ID của... trong cơ sở dữ liệu, sau đó các tài liệu đó có lẽ không cần phải được xác nhận lại tính hợp lệ trong DB2 Tại điểm đó bạn đã biết chúng hợp lệ rồi Hoặc, có lẽ cơ sở dữ liệu đó nhận được các tài liệu XML từ một ứng dụng tin cậy, thậm chí là một ứng dụng mà bạn kiểm soát và bạn biết rằng dữ liệu XML là luôn luôn hợp lệ Trong trường hợp đó, tránh xác nhận tính hợp lệ của lược đồ trước lợi ích về hiệu năng. .. và quan điểm vì tiện ích nhập khẩu thực sự thực hiện một loạt các hoạt động chèn Kể từ DB2 9.5, bạn cũng có thể sử dụng tiện ích LOAD DB2 để di chuyển dữ liệu XML vào một bảng Các lợi thế chủ yếu của tiện ích LOAD với dữ liệu XML giống như với dữ liệu quan hệ, chẳng hạn như dữ liệu không lấy từ tệp log và việc song song hóa được tự động sử dụng để tăng hiệu năng DB2 xác định một mức độ mặc định của... Tương tự như vậy, /customerinfo/addr/city cũng như /customerinfo/*/city trả về city Để có hiệu năng tốt nhất, đường dẫn cụ thể đầy đủ sẽ được ưu tiên hơn so với cách sử dụng * hoặc // bởi vì nó cho phép DB2 chuyển hướng trực tiếp đến các phần tử mong muốn, bỏ qua các phần không liên quan của tài liệu Nói cách khác, nếu bạn biết được trong tài liệu đó phần tử mong muốn sẽ được đặt ở đâu, nó sẽ giúp cung . 15 bài thực hành tốt nhất về hiệu năng pureXML trong DB2 Matthias Nicola, Chuyên gia về hiệu năng CSDL, IBM Silicon Valley Laboratory Tóm tắt: DB2 9 giới thiệu sự hỗ trợ pureXML, . trang mã trong khi chèn và lấy ra XML. Trong cuộc thảo luận về các lời khuyên hiệu năng này, chúng tôi giả định rằng bạn đã quen thuộc với các công việc thực hành hiệu năng và quản trị DB2 cơ. 2009: mã hiệu chỉnh trong các liệt kê 12 và 13 Biên tập.] Giới thiệu Hỗ trợ pureXML trong DB2 9 cung cấp các khả năng hiệu quả và linh hoạt để quản lý dữ liệu XML của bạn. Hiệu năng là một sự ưu