Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Đừng để dòng suối đánh lừa bạn

Đôi khi sự khôn ngoan thông thường không phải là thông thường hoặc quá phổ biến. Vì là trường hợp-tại-điểm, các DBA có thể tin rằng nhóm STREAMS được dành riêng cho các quy trình luồng. Đó không phải là trường hợp khi các tiện ích Oracle khác, chẳng hạn như Data Pump và GoldenGate, sử dụng nhóm đó. Tất nhiên việc chọn sử dụng quản lý động sẽ tự động cấp phát bộ nhớ cần thiết khi có nhu cầu, tuy nhiên bộ nhớ đó phải đến từ một nơi nào đó. Oracle sẽ 'đánh cắp' những gì nó cần từ bộ đệm đệm và nó sẽ không được thay thế ngay lập tức. Hãy xem một ví dụ chứng minh điều này, sử dụng Data Pump.

'Nạn nhân' sẽ là cơ sở dữ liệu Oracle 12.1.0.2 được định cấu hình với stream_pool_size được đặt thành 0 (vì Luồng không được định cấu hình nên kỳ vọng là nhóm sẽ không được sử dụng) và Quản lý bộ nhớ dùng chung tự động được định cấu hình (thông số sga_target và sga_max_size là đặt thành các giá trị khác 0):

 SQL> --SQL> - Nhóm luồng KHÔNG chỉ forSQL> - StreamsSQL> --SQL> - Máy bơm dữ liệu và GoldenGate đều sử dụngSQL> - itSQL> --SQL> - Không đặt kích thước đối với các streamSQL> - pool có thể gây ra sự cố khi nó isSQL> - first usedSQL> --SQL> --SQL> - Nhìn vào các tham số cơ sở dữ liệuSQL> - kiểm tra các tham số sgaSQL> - cho sizingSQL> --SQL> hiển thị tham số sgaNAME TYPE VALUE -------------------------------------------- --- ------------------------------ lock_sga boolean FALSEpre_page_sga boolean TRUEsga_max_size big integer 600Msga_target big integer 600Munified_audit_sga_queue_size integer 1048576 

Kiểm tra chế độ xem V $ SGA_DYNAMIC_COMPONENTS cho các thành phần có kích thước hiện tại khác 0, kết quả sau được trả về:

 SQL> SQL> định dạng thành phần cột a29SQL> thiết lập kích thước dòng 300 numwidth 12SQL> SQL> chọn thành phần, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size_dy ở đâu 4 tại v $namic_size 3 từ hiện tại> 0; COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPEC_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE --------------------------------- ---- ------------ ------------ ------------ ---------- - ------------- ------------- ---------------- shared pool 176160768 146800640 176160768 0 6 TỔNG HỢP DEFERRED 15-OCT-19 4194304 hồ bơi lớn 8388608 8388608 125829120 0 1 SHRINK DEFERRED 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATIC 4194304DEFAULT buffer cache 411041792 301989888 419430400 0 8 SHRINK DEFERRED 15-OCT-19 4194304Shared IO Pool 20971520 0 20971520 0 1 GROW NGAY 15-OCT-19 4194304SQL> 

Xác minh rằng stream_pool_size được đặt thành 0:

 SQL> SQL> --SQL> - Xác minh nhóm luồng được đặt thànhSQL> - 0SQL> --SQL> hiển thị luồng tham số TÊN LOẠI GIÁ TRỊ ---------------- -------------------- -------------------------- ----------- stream_pool_size số nguyên lớn 0SQL> 

Quá trình xuất Data Pump được thực thi và sau đó, các thành phần bộ nhớ động được kiểm tra kích thước:

 SQL> SQL> --SQL> - Chạy tác vụ xuất Data Pump>
 - và xem điều gì xảy ra với cột StreamSQL> - pool sizeSQL> --SQL>! expdp parfile =expdp_test.parSQL> SQL> định dạng thành phần a29SQL> thiết lập kích thước dòng 300 numwidth 12SQL> SQL> chọn thành phần, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_compule 3 từ v $ sgaize_dynamic_URL_ZON_CAM_VN_SO_Size 3RENT_IZEZEnamic_dynamic_URL_ZON_CAM_VN OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE -------------------------------------------- -------- ------------ ------------ ------------ ---------- ------- --------- --------- ------------ nhóm chia sẻ 197132288 146800640 197132288 0 11 TĂNG TRƯỞNG NGAY 15-THÁNG 10- 4194304 pool lớn 8388608 8388608 125829120 0 1 SHRINK DEFERRED 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATIC 4194304streams pool 8388608 0 8388608 0 2 GROW NGAY 15-OCT-19 4194304 PHÁT TRIỂN NGAY LẬP TỨC 15-OCT-19 41943046 hàng được chọn.SQL> 

Lưu ý rằng kích thước bộ đệm DEFAULT đệm đã giảm xuống 381681664 từ cài đặt ban đầu là 411041792, một phần để giúp ‘cấp vốn’ cho nhóm Luồng. Thử nghiệm ý tưởng đó, Stream_pool_size được đặt thành 8M (giá trị mà Oracle đặt nó thành động) và, để làm cho các thử nghiệm giống nhau nhất có thể, cơ sở dữ liệu được tắt và bắt đầu:

 SQL> SQL> --SQL> - Đặt stream_pool_size thành currentSQL> - valueSQL> --SQL> - Tắt và khởi động cơ sở dữ liệuSQL> --SQL> thay đổi hệ thống thiết lập stream_pool_size =8M scope =spfile; Hệ thống đã thay đổi.SQL> SQL> tắt ngay lập tức trước> 

Các tham số bộ nhớ động được kiểm tra cho các giá trị bắt đầu:

 SQL> SQL> --SQL> - Kiểm tra kích thước động của các thành phần SGASQL> --SQL> định dạng thành phần cột a29SQL> đặt kích thước dòng 300 numwidth 12SQL> SQL> chọn thành phần, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_size 3 từ v $ sga_dynamic_components 4 trong đó current_size> 0; COMPONENT CURRENT_SIZE MIN_SIZE MAX_SIZE USER_SPULE_SZ OPER_COUNT LAST_OPER_TYP LAST_OPER_TYP LAST --------- ------------ ------------ ------------ ------------ ------- ------------ ------------- ------------- --------- ------------ nhóm chia sẻ 155189248 146800640 155189248 0 2 TĂNG TRƯỞNG NGAY LẬP TỨC 15-OCT-19 4194304 nhóm lớn 125829120 125829120 125829120 0 0 STATIC 4194304java pool 4194304 4194304 419430 4 0 0 STATIC 4194304streams pool 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT buffer cache 327155712 327155712 335544320 0 2 SHRINK NGAY 15-OCT-19 4194304SQL bin> SQLSQL> --SQL> - Xóa tệp kết xuất trước đó! / rm /u01/app/oracle/admin/orcl/dpdump/scott.* 

Chạy lại công việc Bơm dữ liệu với cài đặt nhóm bộ nhớ đã điều chỉnh:

 SQL> SQL> --SQL> - Chạy tác vụ xuất Data Pump>
 - và xem điều gì xảy ra với cột StreamSQL> - pool sizeSQL> --SQL>! expdp parfile =expdp_test.parSQL> SQL> định dạng thành phần a29SQL> thiết lập kích thước dòng 300 numwidth 12SQL> SQL> chọn thành phần, current_size, min_size, max_size, user_specified_size user_spec_sz, 2 oper_count, last_oper_type, last_oper_mode, last_oper_time, granule_compule 3 từ v $ sgaize_dynamic_URL_ZON_CAM_VN_SO_Size 3RENT_IZEZEnamic_dynamic_URL_ZON_CAM_VN OPER_COUNT LAST_OPER_TYP LAST_OPER LAST_OPER GRANULE_SIZE -------------------------------------------- -------- ------------ ------------ ------------ ---------- ------- --------- --------- ------------ bể chia sẻ 197132288 146800640 197132288 0 12 TĂNG TRƯỞNG NGAY LẬP TỨC 15-THÁNG 10- 4194304 pool lớn 8388608 8388608 125829120 0 1 SHRINK DEFERRED 15-OCT-19 4194304java pool 4194304 4194304 4194304 0 0 STATIC 4194304streams pool 8388608 8388608 8388608 8388608 0 STATIC 4194304DEFAULT buffer cache 381681664 264241152 3816816649 41943046 hàng được chọn.SQL> 

Lưu ý rằng bộ đệm DEFAULT đệm được tăng lên, không giảm như trong ví dụ trước. Không có bộ nhớ nào bị ‘đánh cắp’ khỏi bộ đệm đệm để hiệu suất không bị ảnh hưởng bởi sự dịch chuyển động của tài nguyên. Một vấn đề có thể xảy ra với việc đặt Stream_pool_size thành 0 có thể là sự suy giảm hiệu suất tại thời điểm nhóm luồng được cấp phát vì bộ đệm đệm trải qua quá trình thu hẹp đồng thời nhóm luồng đang phát triển. Điều này có thể đặc biệt đáng chú ý trong các hệ thống mà ban đầu tải của người dùng khá nặng.

Như đã đề cập trước đó GoldenGate cũng sử dụng nhóm luồng và do hoạt động cam kết nặng nề tại thời điểm quá trình trích xuất bắt đầu, có thể cho thấy sự xuống cấp đáng báo động trong dịch vụ kéo dài cho đến khi quá trình trích xuất kết thúc các hoạt động khởi động của nó. [Các quy trình khác do GoldenGate tạo ra góp phần làm chậm lại, chẳng hạn như đồng bộ hóa tệp nhật ký toàn cầu để chuyển dữ liệu đã cam kết vào nhật ký làm lại.] Một hệ thống đã bị ảnh hưởng nặng nề khi quá trình giải nén được bắt đầu đến mức thông tin đăng nhập hệ điều hành không thể hoàn thành khiến phần mềm giám sát của bên thứ ba báo cáo rằng cơ sở dữ liệu đang chạy trên máy chủ đó không còn khả dụng. Việc đặt các stream_pool_size thành một giá trị khác 0 đã góp phần rất lớn trong việc cải thiện hiệu suất tổng thể khi các quá trình trích xuất được bắt đầu.

Kiến thức phổ thông có thể là con dao hai lưỡi; đối với mọi trường hợp mà kiến ​​thức thông thường đúng, có thể có một hoặc nhiều trường hợp không đúng. Giải pháp thực sự duy nhất là kiểm tra "sự khôn ngoan" như vậy để xác minh độ chính xác của nó. Tốt hơn hết là bạn nên tác động đến hệ thống kiểm tra, phát triển hoặc ‘hộp cát’ bằng các cuộc điều tra như vậy hơn là coi ‘kiến thức’ như ‘phúc âm’ chỉ để khám phá các giả định mà ‘sự khôn ngoan’ dựa trên đó là do nhầm lẫn. Biết tốt hơn là đoán; Một chút thời gian dành cho cuộc điều tra có thể gặt hái được những lợi ích to lớn khi có thời gian triển khai một quy trình mới liên quan đến Oracle.

# # #

Xem các bài viết của David Fitzjarrell


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cột tự động tăng dần - Trình tự làm giá trị mặc định trong Oracle

  2. C # - Cách nhận giá trị kiểu thô dài của oracle

  3. Ví dụ về Java trong Cơ sở dữ liệu Oracle

  4. Làm thế nào để đưa ra một ràng buộc duy nhất cho một tổ hợp các cột trong Oracle?

  5. Tách các giá trị được phân tách bằng dấu phẩy của một cột trong hàng, thông qua truy vấn SQL Oracle