Trong hệ thống quản lý cơ sở dữ liệu Oracle, không gian trống trong các segment được quản lý bằng cách sử dụng các bitmaps. Việc quản lý không gian trống bằng bitmaps có nhiều lợi ích, bao gồm khả năng sử dụng không gian linh hoạt hơn, điều chỉnh thời gian chạy và cho phép nhiều tiến trình tìm kiếm các bitmap (BMBS).
Các bitmaps trong các segment cho phép hệ thống quản lý cơ sở dữ liệu Oracle sử dụng không gian trống một cách hiệu quả và linh hoạt hơn.
Quản lý không gian trống bằng db oracle segment
Trong hệ thống cơ sở dữ liệu, không gian trống trong các segment có thể được quản lý tự động. Việc quản lý không gian trống hoặc đã sử dụng trong segment được theo dõi bằng các bitmap. Để sử dụng tính năng này, bạn cần chỉ định Automatic Segment Management khi tạo một tablespace quản lý cục bộ.
Điều này áp dụng cho tất cả các segment được tạo trong tablespace này. Các Automatic Segment Management có một tập hợp các khối bitmap (BMBs) mô tả sử dụng không gian của các khối dữ liệu (Data block) trong segment đó.
Các BMB được tổ chức theo cấu trúc cây. Cấp độ root của cây, chứa các tham chiếu đến tất cả các BMB trung gian, được lưu trữ trong phần segment header. Các lá(leaves) của cây này đại diện cho thông tin không gian cho một tập hợp các khối dữ liệu liền kề thuộc về segment. Số lượng cấp bên trong cây tối đa là ba.
Các lợi ích của việc sử dụng automatic space segment management bao gồm:- Tận dụng không gian tốt hơn, đặc biệt là cho các đối tượng có kích thước hàng đợi biến đổi;
- Điều chỉnh thời gian chạy tốt hơn cho các truy cập đồng thời.
- Cải thiện hiệu suất hoặc sử dụng không gian đa mục tiêu.
Các loại DB Oracle Segment
Segment là một tập hợp các extents được cấp phát cho một cấu trúc logic nhất định. Các loại segment khác nhau bao gồm: segment bảng và nhóm, segment chỉ mục, segment undo, và segment tạm thời. Tất cả các loại segment này được cấp phát động bởi máy chủ cơ sở dữ liệu Oracle.
- Table và cluster segments: Mỗi bảng không phân cụm có một segment data. Tất cả các dữ liệu bảng được lưu trữ trong các Extents của phân table segment. Đối với bảng có phân vùng, mỗi phân vùng đều có một segment data. Mỗi cụm (cluster) có một segment data. Dữ liệu của mỗi bảng trong cụm được lưu trữ trong segment data của cụm đó.
- Index Segment: Mỗi chỉ mục (index) đều có một index segment lưu trữ toàn bộ dữ liệu của nó. Đối với chỉ mục có phân vùng, mỗi phân vùng đều có một index segment.
- Undo segment: Hệ thống Oracle Database giữ thông tin để phục hồi các thay đổi được thực hiện trong cơ sở dữ liệu. Thông tin này bao gồm các bản ghi về các hoạt động của các Transaction, được gọi là hoàn tác (undo). Hoàn tác được lưu trữ trong các phân đoạn hoàn tác (undo segment) trong một không gian tạm thời hoàn tác (undo tablespace).
- Temporary segment: Một phân đoạn tạm thời được tạo ra bởi hệ thống Oracle Database khi một câu lệnh SQL cần một vùng dữ liệu tạm thời để hoàn tất thực thi. Khi câu lệnh thực thi xong, các extents trong temporary segment được trả lại cho hệ thống để sử dụng trong tương lai.
Hệ thống Oracle Database tự động phân bổ không gian khi các Extents hiện có của một Segment trở nên đầy. Vì các Extents được phân bổ theo nhu cầu, các Extents của một segment có thể liên tiếp hoặc không liên tiếp trên đĩa.
Phân bổ các Extents trong Oracle DB
Trong locally managed tablespaces, Oracle Database tìm kiếm không gian trống để cấp phát cho một extent mới bằng cách xác định một data file ứng cử viên trong tablespace và tìm kiếm bitmap của data file đó để tìm số lượng khối trống liên tiếp cần thiết. Nếu data file đó không có đủ không gian trống liên tiếp, Oracle Database sẽ tìm kiếm trong một data file khác. Có hai mệnh đề ảnh hưởng đến kích thước của extent:
- Mệnh đề UNIFORM: database sẽ tạo tất cả các extent với kích thước đồng đều mà bạn đã chỉ định (hoặc kích thước mặc định) cho bất kỳ đối tượng nào được tạo trong tablespace.
- Mệnh đề AUTOALLOCATE: database xác định chính sách kích thước extent cho tablespace.
Oracle Database cung cấp Segment Advisor để giúp xác định xem một đối tượng có không gian có sẵn để thu hồi dựa trên mức độ mảnh vụn không gian bên trong đối tượng.
Hiểu về việc hoãn tạo segment trong Oracle DB
Khi bạn tạo một bảng không phân vùng, việc tạo phân đoạn của bảng được hoãn cho lần chèn hàng đầu tiên. Chức năng này được kích hoạt mặc định với tham số khởi tạo DEFERRED_SEGMENT_CREATION được đặt thành TRUE.
Các lợi ích của phương pháp phân bổ không gian này bao gồm:
- Có thể tiết kiệm lượng lớn không gian đĩa cho các ứng dụng tạo ra hàng trăm hoặc hàng nghìn bảng khi cài đặt, trong đó có nhiều bảng có thể không bao giờ được điền.
- Thời gian cài đặt ứng dụng được rút ngắn. Khi bạn insert row đầu tiên vào bảng, các segment sẽ được tạo cho bảng cơ bản, các cột LOB và các chỉ mục của nó. Trong quá trình tạo segment, các con trỏ trên bảng bị vô hiệu hóa. Những hoạt động này có một tác động nhỏ hơn đến hiệu suất.
Lưu ý: Với phương pháp phân bổ này, rất quan trọng để bạn lập kế hoạch khả năng chứa đầy đủ để cơ sở dữ liệu có đủ không gian đĩa để xử lý việc tạo phân đoạn khi các bảng được điền dữ liệu.
Xem các thông tin về deferred segment:
Hình trên chỉ cho bạn cách kiểm tra tham số DEFERRED_SEGMENT_CREATION. Sau đó, một bảng được tạo mà không có segment, bạn có thể xác minh bằng cách truy vấn view USER_SEGMENTS trong data dictionary.
Sau khi insert một hàng vào bảng, bạn truy vấn view này một lần nữa để xem segment đã tồn tại. Bạn cũng có thể truy vấn cột SEGMENT_CREATED của các view USER_TABLES, USER_INDEXES hoặc USER_LOBS.
Với bảng, chỉ số và LOBs không được phân vùng, cột này sẽ hiển thị YES nếu segment đã được tạo. Bảng từ điển SYS.SEG$data lưu trữ các tham số lưu trữ mà bạn đã chỉ định trong quá trình tạo bảng hoặc chỉ số.
Kiểm soát deferred segment creation:
Segment creation có thể được kiểm soát theo hai cách:
- Bằng cách thiết lập tham số khởi tạo DEFERRED_SEGMENT_CREATION là TRUE hoặc FALSE. Tham số này có thể được thiết lập trong tệp khởi động. Bạn cũng có thể kiểm soát nó thông qua các lệnh ALTER SESSION hoặc ALTER SYSTEM. Ví dụ:
- ALTER SESSION SET DEFERRED_SEGMENT_CREATION = TRUE;
- ALTER SYSTEM SET DEFERRED_SEGMENT_CREATION = FALSE;
- Với mệnh đề SEGMENT CREATION của lệnh CREATE TABLE:
- SEGMENT CREATION DEFERRED: Nếu được chỉ định, việc tạo phân đoạn được hoãn đến khi hàng đầu tiên được chèn vào bảng. Đây là hành vi mặc định cho Oracle Database 11g Release 2 và các phiên bản sau đó.
- SEGMENT CREATION IMMEDIATE: Nếu được chỉ định, phân đoạn được tạo ra trong quá trình tạo bảng. Đây là hành vi mặc định trong các cơ sở dữ liệu Oracle trước Oracle Database 11g Release 2. Mệnh đề này ưu tiên hơn tham số DEFERRED_SEGMENT_CREATION.
Có thể bắt buộc tạo phân đoạn cho một bảng đã tạo với lệnh ALTER TABLE ... MOVE. Tuy nhiên, không thể kiểm soát việc tạo phân đoạn bị hoãn trực tiếp cho các đối tượng phụ thuộc như các chỉ mục. Chúng thừa kế đặc điểm này từ đối tượng cha của chúng - trong trường hợp này là bảng.
Deferred segment creation chỉ hỗ trợ cho các bảng không phân vùng và các chỉ mục không phân vùng. Việc tạo phân đoạn khi cần không được hỗ trợ cho IOTs, các bảng nhóm, bảng tạm toàn cục, bảng tạm phiên của phiên, các bảng nội bộ, các bảng có kiểu dữ liệu, các bảng AQ, các bảng thuộc hệ thống SYS, PUBLIC, OUTLN và XDB. Các chỉ mục liên kết bitmap và các chỉ mục tên miền cũng không được hỗ trợ.
Các bảng thuộc sở hữu của SYSTEM, PUBLIC, OUTLN, và XDB cũng bị loại trừ. Việc tạo phân đoạn khi cần không được hỗ trợ cho các bảng được tạo trong các tablespace được quản lý từ điển và cho các bảng nhóm.
Nếu bạn tạo bảng với việc tạo phân đoạn bị hoãn trên một tablespace được quản lý cục bộ, bảng đó sẽ không có phân đoạn. Nếu sau đó, bạn chuyển tablespace sang cách quản lý từ điển, bất kỳ nỗ lực tạo phân đoạn nào cũng sẽ gây ra lỗi. Trong trường hợp này, bạn phải xóa bảng và tạo lại nó.
Các tính năng bổ sung được triển khai trong Oracle Database để tiết kiệm không gian lưu trữ. Tất cả các chỉ mục và phân vùng chỉ mục UNUSABLE được tạo mà không có segment. Chức năng này hoàn toàn minh bạch đối với người dùng.
Ví dụ: Nếu bạn có một bảng DEMO với ba phân vùng và một chỉ mục địa phương, bạn sẽ thấy ba phân đoạn của bảng và ba đoạn chỉ mục khi thực thi truy vấn, như được hiển thị trong slide. Nếu bạn thực thi cùng một truy vấn sau khi di chuyển một phân vùng bảng sang một tablespace mới, bạn sẽ thấy ba phân đoạn của bảng và chỉ hai đoạn chỉ mục vì đoạn không sử dụng sẽ tự động bị xóa.