Những điểm mới và lý thú trong sản phẩm
Data Studio Developer 2.1 của IBM
Thấu hiểu ứng dụng hơn và tăng năng suất
Sonali Surange, Trưởng nhóm Các công cụ pureQuery của Data Studio, IBM
Zeus Courtois, Kỹ sư phần mềm, IBM
Tóm tắt: Khám phá sản phẩm IBM® Data Studio Developer 2.1 sẽ giúp đỡ bạn
hiểu tốt hơn các ứng dụng cơ sở dữ liệu của mình như thế nào. Thấy được cách
triển khai mới của Data Studio Developer có thể cải thiện năng suất của bạn và
tăng cường sự hợp tác giữa các chuyên viên phát triển và các quản trị viên cơ sở
dữ liệu như thế nào. Hãy theo các kịch bản trong bài báo này và trải nghiệm cách
sử dụng Data Studio Developer 2.1 để làm được nhiều hơn, dễ dàng hơn và hiểu
thấu công việc hơn. .
Giới thiệu
Một số lợi ích chủ yếu của bản phát hành mới của Data Studio Developer gồm:
Cho bạn nhiều thông tin hơn để tập trung vào các nỗ lực tinh chỉnh SQL
của mình.
Cải thiện chất lượng dịch vụ cho OpenJPA và cho các ứng dụng . NET.
Có cái nhìn thấu hiểu hơn vào bên trong những ứng dụng Java có sử dụng
SQL.
Giúp bạn cải thiện năng suất và sự hợp tác giữa các chuyên viên phát triển
và các quản trị viên cơ sở dữ liệu.
Bạn sẽ có khả năng để giảm bớt hay loại trừ nguy cơ “mũi tiêm SQL” (SQL
injection) cho các ứng dụng cơ sở dữ liệu với Java.
Một số điều kiện cần có trước để chạy các kịch bản thực hành
Bạn cần phải cài đặt các sản phẩm sau để thử các kịch bản bên dưới :
Data Studio Developer 2.1
DB2® cho Linux®, UNIX® và Windows® -– DB2 Express-C làm việc rất
tốt
Cơ sở dữ liệu mẫu của DB2 đi cùng với sản phẩm này.
Cung cấp cho các chuyên viên phát triển nhiều thông tin hơn để tập trung vào các
nỗ lực tinh chỉnh SQL.
Nhận diện các câu lệnh SQL và tần số thực thi của chúng
Các công cụ định hình hiện tại giúp cho bạn nhận diện phương thức Java™ nào
trong ứng dụng cần nhiều thời gian nhất để chạy. Với Data Studio Developer 2.1
bạn có thể thâm nhập xuống sâu hơn, thậm chí thấy được các số đo hiệu năng của
các phương thức Java mà có chứa lệnh gọi tới cơ sở dữ liệu. Dù bạn sử dụng
pureQuery, JDBC hay khung công tác khác, bạn cũng có thể xác định được thời
gian chạy của từng câu lệnh SQL trong ứng dụng của bạn, chúng chạy bao nhiêu
lần và thời gian chạy tối đa, tối thiểu và trung bình là bao nhiêu.
Hãy thử các bước đơn giản sau trên Data Studio :
Hiểu các số đo về thực thi câu lệnh SQL trong pureQuery
Cửa sổ chính pureQuery cho thấy thông tin sau về mỗi câu lệnh SQL mà ứng dụng
đã chạy :
Số lần mà SQL đã chạy - Số lần chạy
Tổng cộng các thời gian chạy mỗi lần của lệnh SQL - Thời gian tổng cộng
Thời gian dài nhất mà lệnh SQL đã một lần từng chạy - Thời gian tối đa
Trung bình các thời gian mà lệnh SQL chạy mỗi lần - Thời gian trung bình
Thời gian ngắn nhất mà lệnh SQL đã một lần từng chạy - Thời gian tối
thiểu
Bạn có thể sử dụng thông tin này để xác định những câu lệnh SQL nào sẽ được lợi
từ tối ưu hóa và xác định các vấn đề của lệnh SQL. Bạn cũng có thể sử dụng thông
tin đó để xác định những câu lệnh SQL được thực hiện thường xuyên đến mức độ
nào.
1. Tại cửa sổ, bạn nhấn Data Management > Data Source Explorer (trước đây
là Database Explorer). Tạo một kết nối tới cơ sở dữ liệu mẫu và đặt tên kết
nối là SAMPLE.
2. Tạo ra một dự án Java và đặt tên là myDSDPrj.
3. Tải và sao chép các tệp TutMod.java và Util.java vào gói db2jcc.example.
Tệp tin này là ứng dụng JDBC đơn giản hiện có mà bạn sẽ sử dụng để chạy
nhiều kịch bản.
4. Để thêm sự hỗ trợ pureQuery vào dự án :
1. Nhấn phím phải chuột trên dự án và chọn pureQuery -> Add
pureQuery support.
2. Chọn SAMPLE và thêm lược đồ thích hợp để cấp tên đủ phân biệt
cho bảng STAFF của bạn.
3. Tại hình ở dưới, lược đồ là SSURANGE.
4. Đánh dấu chọn hộp Enable SQL capturing and binding for JDBC
applications
Hình 1. Thêm hỗ trợ pureQuery
Lưu ý bây giờ bạn có khả năng mạnh hơn nhiều khi xác định một lược đồ
mặc định để cấp tên đủ phân biệt cho các bảng và khung nhìn. Sử dụng
widget đường dẫn mặc định mới để cấp tên đủ phân biệt cho các thủ tục
thường lệ (routine) có tên chưa đủ phân biệt của bạn.
5. Để thu thập các số đo hiệu năng, hãy chạy ứng dụng bằng cách sử dụng cấu
hình pureQuery :
1. Đặt lược đồ để cấp tên đủ phân biệt cho bảng STAFF trước khi chạy
ứng dụng. Để làm điều này, bạn mở TutMod.Java, tìm tới dòng 66
và thay đổi giá trị SSURANGE thành tên lược đồ của bạn và lưu tệp
stmt.execute("set current schema SSURANGE");
2. . Sử dụng cấu hình pureQuery để chạy ứng dụng bằng cách mở tệp
TutMod.java, rồi nhấn phím phải chuột trên tệp và chọn Run ->
Run Configurations.
3. Chọn pureQuery và cung cấp các thông tin cho tên cơ sở dữ liệu,
máy chủ, cổng , ID người dùng và mật khẩu (Hình 2) và nhấn Run.
4. SQL được thực hiện và thông tin hiệu năng được thu thập lại.
Hình 2. Chạy ứng dụng để thu thập các số đo của SQL
6. Để xem các thông tin hiệu năng:
1. Nhấn chuột phải trên tệp myDSDPrj và chọn Show pureQuery
outline
2. Trong cửa sổ chính pureQuery, nhấn vào nút Toggle Profile
3. Mở rộng dự án myDSDPrj và bạn có thể nhìn thấy thông tin hiệu
năng của mỗi câu lệnh SQL.
Ví dụ, hình ở dưới cho thấy câu lệnh SELECT được chạy 2 lần với
tổng thời gian là 270 ms.
Hình 3. Các số đo thời gian thực hiện của SQL
Câu lệnh SELECT được chạy thường xuyên hơn và ứng dụng có lẽ đã được lợi bởi
việc tối ưu hóa câu lệnh SQL này.
Tinh chỉnh và tối ưu hóa ứng dụng của bạn mà không thay đổi mã
Nếu bạn đang chạy trên DB2 cho z/OS
Optimization Expert của DB2 cho z/OS có thể cung cấp lời khuyên để cải thiện
hiệu năng một câu lệnh SQL như thế nào. Với phiên bản sắp tới của Optimization
Expert, bạn có thể thật sự chia sẻ với Data Studio Developer, vì vậy bạn sẽ có khả
năng sao chép câu lệnh SQL từ bộ biên tập XML của pureQuery đến Optimization
Expert và sau đó sao chép câu lệnh tương đương đã được tối ưu hóa vào lại bộ
biên tập.
Một khi bạn nhận diện được lệnh SQL có vấn đề, bạn cần tối ưu hóa nó. Đối với
các ứng dụng đang sử dụng thực tế hay các ứng dụng được đóng gói bạn có thể
không có khả năng để thay đổi mã nguồn ứng dụng, nhưng bạn vẫn muốn có khả
năng thay đổi câu lệnh SQL được sinh ra. Ví dụ, bạn muốn thay đổi các SQL để
tận dụng một chỉ mục mới bổ sung, để giới hạn số hàng được trả về, hay để thêm
một mệnh đề ORDER BY rất cần thiết.
Data Studio Developer 2.1 cung cấp một bộ biên tập được kiểm soát để cho bạn
thay thế câu lệnh SQL hiện hữu được phát sinh từ ứng dụng bằng một câu lệnh
tương đương và hy vọng là tốt hơn. Bộ biên tập tự động làm cho có hiệu lực sự
tương đương câu lệnh và không công nhận các câu lệnh không tương đương.
Thực hiện các bước đơn giản sau tại nơi cài đặt Data Studio Developer của bạn :
Soạn tệp XML pureQuery bằng cách sử dụng bộ biên tập XML pureQuery
Khi bạn thay thế một câu lệnh SQL hiện hữu, thì câu lệnh thay thế đó phải tương
thích với câu lệnh hiện hữu, nghĩa là phải có cùng số lượng tham số, cùng các kiểu
tham số và cùng dạng tập hợp kết quả, nếu có. Nếu SQL được thay thế không
tương thích hay có những lỗi không hợp thức (cú pháp hay ngữ nghĩa), bộ biên tập
sẽ cho thấy các lỗi và bạn không thể ghi lưu tệp cho đến khi bạn sửa được lỗi. Nếu
muốn quay lại câu lệnh ban đầu được phát sinh từ ứng dụng, bạn sử dụng trình
đơn Reset to capture statement. Hãy xóa câu lệnh SQL nếu bạn không muốn liên
kết nó.
1. Tại myDSDPrj, mở rộng pureQueryFolder. Nhấn đúp trên tệp
capture.pdqxml
2. Nhấn phím phải chuột trên câu lệnh SELECT ( SELECT id, name, dept,
job, years, salary, comm FROM staff WHERE id = ?)và chọn Edit. Đây là
câu lệnh SELECT mà bạn thấy ở Hình 3 phía trên. Chọn lược đồ mặc định
để cấp tên đủ phân biệt cho bảng của bạn.
Hình 4. Câu lệnh SQL hiện hữu để giảm bớt số lượng hàng được trả về
3. Bây giờ bạn có thể soạn thảo câu lệnh với SQL sau, nó tương đương nhưng
trả về ít hàng hơn:
SELECT id, name, dept, job, years, salary, comm FROM staff WHERE id
= ? fetch first 2 rows only
4. Nhấn Save.
Hình 5. Thay thế bằng câu lệnh SQL tối ưu
Bây giờ khi bạn đã thay đổi SQL để trả về ít hàng hơn, chạy lại câu lệnh lần nữa
và xem nó có làm nên bất kỳ sự khác biệt nào về các số đo hiệu năng chưa.
1. Chạy ứng dụng lần nữa :
1. Mở pdq.properties và tắt captureMode và thêm
enableDynamicSQLReplacement as true
pdq.captureMode=OFF pdq.executionMode=DYNAMIC
pdq.enableDynamicSQLReplacement=TRUE .
2. Chạy ứng dụng sử dụng cấu hình pureQuery.
2. Để xem các số đo hiệu năng lần nữa, nhấn chuột phải vào myDSDPrj và
chọn Show pureQuery outline
3. Hình ở dưới cho thấy câu lệnh SELECT chạy hai lần (như trước đây)
nhưng với một thời gian tổng cộng là 126 ms. Bạn lưu ý rằng câu lệnh SQL
mất ít thời gian hơn so với trước đây.
Hình 6. Hiệu năng SQL tốt hơn sau khi thay thế bằng câu lệnh SQL tối
ưu
Cải thiện chất lượng dịch vụ cho OpenJPA và cho các ứng dụng .NET
Xác định vấn đề và chất lượng dịch vụ trở nên dễ dàng với JPA
Bây giờ bạn có thể có được kiến thức về bất kỳ SQL và JPAQL nào tạo ra bởi các
ứng dụng truy nhập dữ liệu DB2 dạng JPA hiện hữu hay mới. Bạn cũng có thể sử
dụng ngay SQL tĩnh mà không phải thay đổi bất kỳ mã ứng dụng nào. Nếu ứng
dụng của bạn sử dụng DB2, bạn hãy sử dụng bộ phát tĩnh (wsdb2gen) trong
WebSphere® Application phiên bản 7 để thu thập SQL. Đa số các lợi ích đã sẵn
có mà không phải chạy các ứng dụng. Đối với các trường hợp còn lại, hãy kết hợp
với tối ưu hóa phía khách. Data Studio Developer 2.1 bao gồm các hỗ trợ về công
cụ để làm cho quá trình sinh gói tĩnh dễ dàng hơn. Bạn cần phải có WebSphere 7
fixpack 3.
Hãy theo các bước đơn giản sau tại nơi cài đặt Data Studio Developer của bạn:
1. Thêm hỗ trợ pureQuery vào dự án JPA của bạn.
2. Thêm com.ibm.ws.jpa.jar từ nơi cài đặt WebSphere của bạn vào đường dẫn
xây dựng (build path).
3. Nhấn phím phải chuột trên persistence.xml và chọn pureQuery >
Generate pureQueryXml file.
4. Nhấn phím phải chuột trên project và chọn pureQuery->Show
pureQuery outline.
5. Xem tất cả các CRUDs có thể phát sinh từ các thực thể, các namedQueries
và namedNativeQueries từ các thực thể cũng như các tệp ánh xạ.
6. Nhấn đúp trên bất kỳ SQL nào để đi sâu vào trong mã nguồn JPA đã khởi
sự truy vấn SQL.
7. Như một bước tùy chọn, bạn có thể sử dụng sự tối ưu hóa phía khách để bắt
giữ các lệnh SQL mà chỉ có sẵn trong chế độ chạy thực (ví dụ các câu lệnh
JPAQL động). Chạy ứng dụng của bạn với pdq.Properties captureMode
được bật ON và thu thập bất kỳ JPAQL và SQL nào lưu lại từ ứng dụng của
bạn.
Dù ứng dụng của bạn đang sử dụng DB2 hay không, hãy tối ưu hóa ứng dụng JPA
không-DB2 hiện hữu mà không thay đổi một dòng mã nào. Để thay thế SQL hiện
hữu bằng một SQL tối ưu, bạn tham khảo mục Tinh chỉnh và tối ưu hóa ứng dụng
của bạn mà không thay đổi mã. Tham khảo thêm hướng dẫn thực hành chuyên sâu
về sự hỗ trợ của Data Studio Developer 2.1 cho JPA.
Cải thiện chất lượng dịch vụ cho các ứng dụng .NET đang sử dụng SQL tĩnh
Data Studio pureQuery Runtime 2.1 cung cấp hỗ trợ để cải thiện tính ổn định, tính
an toàn và tính dễ điều khiển của các ứng dụng .NET, bao gồm cả những ứng dụng
được viết trong bất kỳ ngôn ngữ dựa trên .Net nào ví dụ như C# và VB.Net. Bạn
hãy nâng cấp ứng dụng .Net hiện hữu với những điểm nối bật về SQL này.
1. Bật chế độ bắt giữ (thành ON) trong xâu kết nối .Net
captureMode =
on;pureQueryXML=path/filename:collection=collName;rootpackage=pkgN
ame
2. Thực hiện tất cả các kiểm thử
3. Sử dụng tiện ích DB2cap để liên kết và tạo ra các gói tĩnh từ SQL đã thu
thập được
4. Cấp các quyền thực thi
5. Tắt chế độ bắt giữ (thành OFF) và đặt chế độ thực thi (executionMode) ở
trạng thái STATIC trong xâu kết nối
executionMode=STATIC:captureMode=OFF
6. Thực hiện tất cả các kiểm thử để kiểm tra các kết quả là đúng.
Chương trình C# hay VB.Net hiện hữu của bạn bây giờ được chạy với SQL tĩnh!
Thấu hiểu hơn các ứng dụng Java sử dụng SQL
Hãy xem SQL nào sẽ được tạo ra mà không cần chạy ứng dụng của bạn
Để sử dụng Data Studio Developer 1.2 cho các ứng dụng hiện hữu ở cửa sổ chính
pureQuery, bạn đã phải chạy ứng dụng để nhìn thấy SQL đã được tạo ra và để xem
nó ở chỗ nào trong mã nguồn. Với Data Studio Developer 2.1, bạn có thể tự động
xem nhanh SQL trong ứng dụng của bạn mà không phải chạy ứng dụng. Bạn sẽ có
khả năng nhìn thấy bất kỳ SQL được viết thành mã lệnh trong ứng dụng. Bạn có
thể chạy ứng dụng để thu thập bất kỳ SQL nào còn lại.
Hãy theo các bước sau tại nơi cài đặt Data Studio Developer của bạn:
1. Nhấn phím phải chuột trên myDSDPrj và chọn Show pureQuery outline.
2. Tại cửa sổ chính pureQuery, nhấn vào nút Toggle Profile
3. Chọn phiếu Database. Lưu ý rằng các câu lệnh Cập nhật và Xóa mà chưa
được thực hiện, sẽ hiện ra tại cửa sổ chính. Nhấp đúp chuột vào DELETE
statement để tới vị trí của nó trong tệp Java. Trong hình ở dưới, bạn có thể
thấy rằng nguồn Java phát sinh lệnh DELETE là câu lệnh executeUpdate.
Hình 7. Xem nhanh tự động vào trong câu lệnh SQL – Phiếu Cơ sở dữ
liệu
4. Nhấn chuột vào phiếu Java. Mở rộng myDSDPrj và gói có tên là
db2jcc.example. Lưu ý rằng các câu lệnh DELETE và UPDATE mà chưa
được thực hiện, sẽ hiện ra trong cửa sổ chính. Lần này, bạn nhấn đúp lên
câu lệnh Update và tới vị trí của nó trong tệp Java (trường hợp này sẽ tới
câu lệnh JDBC được chuẩn bị sẵn). Bạn lưu ý rằng vị trí thực thi cho câu
lệnh được chuẩn bị sẵn cũng được hiện ra tại lệnh executeUpdate của
JDBC.
Hình 8. Nhìn nhanh tự động vào trong câu lệnh SQL – Phiếu Java
Nếu bạn thật sự đang chạy ứng dụng, độ chính xác của vị trí của SQL được cải
thiện. Hơn nũa, nó bao gồm bất kỳ SQL nào được xây dựng động.
Bạn theo các bước sau tại Data Studio Developer :
1. Mở TutMod.java và xóa dấu chú thích trước lệnh gọi basicUpdate trong
phương thức main.
2. Để chạy ứng dụng :
1. Mở pdq.properties đặt captureMode thành ON và thêm
enableDynamicSQLReplacement thành false
pdq.captureMode=ON pdq.executionMode=DYNAMIC
pdq.enableDynamicSQLReplacement=false
2. Chạy ứng dụng
3. Nhấn phím phải chuột trên myDSDPrj và chọn Show pureQuery outline.
4. Nhấn vào phiếu Java. Mở rộng myDSDPrj và gói có tên db2jcc.example.
Lưu ý rằng gợi ý executeUpdate, hiện ra trước đó, bây giờ được thay thế
bằng câu lệnh SQL UPDATE thực tế.
Hình 9. Chạy ứng dụng để có độ chính xác cao hơn – Phiếu Java
Xác định SQL nào sẽ được tạo ra và được tạo ra từ đâu
Trước đây, cửa sổ chính pureQuery bị hạn chế ở từng dự án riêng lẻ, vì vậy bạn có
thể chỉ nhìn thấy thông tin về SQL được tạo ra từ ứng dụng của bạn ở mức từng dự
án. Đối với các ứng dụng trải trên nhiều dự án bạn khó có thể có một bức tranh
đầy đủ.
Đóng tất cả các dự án trong không gian làm việc mà không thuộc về ứng dụng của
bạn. Data Studio Developer 2.1 cung cấp cho bạn tất cả thông tin bạn cần về SQL
mà ứng dụng của bạn sẽ tạo ra đối với cơ sở dữ liệu.
Trước khi bạn tiếp tục, chúng ta sẽ thêm một số dự án vào ứng dụng của bạn. Data
Studio Developer bây giờ cho phép bạn tạo ra mã pureQuery theo khối lớn cho
nhiều bảng.
Sinh mã từ dưới lên theo khối lớn
Tại Data Studio Developer phiên bản 1.2, bạn chỉ có thể sinh mã cho một bảng
đơn. Tại phiên bản 2.1, bạn có thể sinh mã từ dưới lên nhanh chóng hơn hơn cho
nhiều bảng.
1. Tạo một dự án Java với tên là pdqBulkBottomUp.
2. Chọn bảng DEPARTMENT và EMPLOYEE, nhấn phím phải chuột và
chọn Generate pureQuery code.
3. Đặt tên gói và chọn Generate annotated style. Nhấn Next.
Hình 10. Sinh mã pureQuery từ hai bảng
4. Đối với bảng DEPARTMENT, chọn phiếu SQL Statements. Chọn Create
row by parameters, và Create row by object như hình ở dưới. Nhấn
Finish.
Hình 11. Sinh mã pureQuery - Chọn câu lệnh SQL
5. Bây giờ mã truy nhập dữ liệu có thể được sinh ra cho một số lớn bảng rất
nhanh chóng! Chú ý rằng các câu lệnh CRUD của SQL được tạo ra riêng rẽ
cho mỗi bảng; điều đó có nghĩa là, mối quan hệ giữa các bảng không được
xem xét.
6. Nhấn phím phải chuột trên dự án và chọn Show pureQuery outline để đi
sâu vào trong cơ sở dữ liệu và đi sâu vào trong ứng dụng đối với mỗi lệnh
SQL. Tìm câu trả lời cho các câu hỏi như: SQL nào sử dụng bảng
DEPARTMENT và nó được sử dụng ở đâu trong mã Java?
Hình 12. SQL nào sử dụng một lược đồ hay bảng nhất định và nó được
sử dụng ở đâu trong mã Java – Phiếu Cơ sở dữ liệu
7. Nhấn vào phiếu Java; và như bạn muốn, tất cả các dự án đều được nhìn
thấy tại cửa sổ chính pureQuery. Bạn có thể đi sâu xuống để tìm mối tương
quan từ lớp Java tới SQL trên cơ sở dữ liệu trong ứng dụng của bạn. Tìm
câu trả lời các câu hỏi như: SQL nào được lớp Java DepartmentData tạo ra
và ở đâu?
Hình 13. Câu lệnh SQL được sinh ra bởi lớp Java và ở đâu - Phiếu
Java
Khám phá câu lệnh SELECT nào được ứng dụng của bạn sử dụng hoặc những câu
lệnh SQL nào sử dụng hàm giá trị tuyệt đối (abs)
Trước đây, bạn có thể nhận được thông tin về câu lệnh SQL nào sử dụng cột hay
bảng cơ sở dữ liệu khi sử dụng bộ lọc tại cửa sổ chính pureQuery. Dù bạn đang sử
dụng APIs của pureQuery hay có các ứng dụng hiện tại đang sử dụng JDBC hay
khung công tác, thì Data Studio Developer 2.1 cũng cho phép bạn tập trung vào
SQL mà bạn quan tâm bằng cách cho phép tăng cường lọc. Sử dụng khả năng này
để tìm ra câu lệnh SQL nào sử dụng một cột cụ thể và câu lệnh nào trong số chúng
là câu lệnh SELECT. Bạn cũng biết được những câu lệnh SQL nào sử dụng một
hàm nhất định.
Lọc cửa sổ chính pureQuery để tập trung vào một SQL cá biệt
Bạn có thể sử dụng xâu ký tự bất kỳ làm mẫu tìm kiếm để lọc câu lệnh SQL chứa
đựng xâu đó. Ví dụ, bạn có thể sử dụng (.*ABS.*) để tìm ra những câu lệnh SQL
nào sử dụng hàm abs. Cửa sổ chính PureQuery làm mới lại (refresh) tự động khi
cần. Bạn có thể gỡ bỏ lọc cho toàn bộ ứng dụng bằng cách chọn thủ công biểu
tượng Refresh with projects in workspace ở ngay sát cạnh biểu tượng Lọc. Bạn
có thể tiếp tục làm mới lại thủ công bằng cách sử dụng biểu tượng Refresh
project in outline.
Bạn theo các bước đơn giản sau :
1. Nhấn vào nút Filter tại cửa sổ chính pureQuery như hình ở dưới.
2. Nhập thông tin lọc (.*SELECT.*) làm mẫu lọc văn bản SQL, rồi chọn OK.
(.*SELECT.*)
3. Bây giờ, bạn có thể nhìn thấy tất cả các câu lệnh SELECT từ ứng dụng của
bạn tại cửa sổ chính pureQuery sau khi lọc.