Phục hồi không gian logic từ một vùng bảng


11

Tôi có một không gian bảng được gọi là DATA và nó được thiết lập với tính năng tự động mở rộng là sai. Không gian bảng này có hai tệp dữ liệu và được thiết lập để chiếm 350 GB không gian vật lý.

Một tuần trước tôi đã truy vấn user_tablespaces và dba_data_files và nhận thấy nó có 20% không gian logic có sẵn. Sau đó tôi tiến hành dọn dẹp và xóa nhiều bản ghi khỏi các bảng trong vùng bảng này. Chúng tôi đã mong đợi để thấy một sự gia tăng lớn trong không gian có sẵn. Thật không may khi tôi truy vấn các lượt xem tôi nhận thấy không gian có sẵn bây giờ là 20,5%.

Điều này có thể là do sự phân mảnh dữ liệu? Chúng ta có thể "chống phân mảnh" không gian bảng bằng cách nào đó và phục hồi không gian bị mất không? Hay chúng ta cần tạo lại không gian bảng từ đầu?

Câu trả lời:


14

Khi bạn xóa các bản ghi, không có gì tự động thu nhỏ phân khúc, do đó bạn sẽ cần thực hiện thu nhỏ phân đoạn để lấy lại không gian. Dưới đây là đoạn trích từ Hướng dẫn của Quản trị viên 11.2 về việc lấy lại không gian bị lãng phí :

Theo thời gian, các cập nhật và xóa trên các đối tượng trong một vùng bảng có thể tạo ra các khoảng trống trống riêng lẻ không đủ lớn để được sử dụng lại cho dữ liệu mới. Loại không gian trống này được gọi là không gian trống phân mảnh.

Các đối tượng có không gian trống bị phân mảnh có thể dẫn đến lãng phí nhiều không gian và có thể ảnh hưởng đến hiệu suất cơ sở dữ liệu. Cách ưa thích để chống phân mảnh và lấy lại không gian này là thực hiện thu nhỏ phân khúc trực tuyến. Quá trình này củng cố không gian trống bị phân mảnh dưới vạch nước cao và thu hẹp phân khúc. Sau khi nén, vạch nước cao được di chuyển, dẫn đến không gian trống mới phía trên vạch nước cao. Không gian đó phía trên vạch nước cao sau đó được giải phóng. Phân đoạn vẫn có sẵn cho các truy vấn và DML trong hầu hết các hoạt động và không cần phân bổ thêm dung lượng đĩa.

Hơn nữa trên cùng một trang bạn có thể đọc điều này:

Phân khúc thu nhỏ là một hoạt động trực tuyến, tại chỗ. Các hoạt động và truy vấn DML có thể được ban hành trong giai đoạn di chuyển dữ liệu của phân đoạn. Các hoạt động DML đồng thời bị chặn trong một thời gian ngắn khi kết thúc hoạt động thu nhỏ, khi không gian được giải phóng. Các chỉ mục được duy trì trong quá trình thu nhỏ và vẫn có thể sử dụng được sau khi hoàn thành thao tác. Phân khúc thu nhỏ không yêu cầu thêm không gian đĩa được phân bổ.

Phân khúc thu nhỏ không gian sử dụng cả trên và dưới mực nước cao. Ngược lại, sự phân chia không gian chỉ lấy lại không gian chưa sử dụng phía trên vạch nước cao. Trong các hoạt động thu nhỏ, theo mặc định, cơ sở dữ liệu thu nhỏ phân đoạn, điều chỉnh vạch nước cao và giải phóng không gian khai hoang.

Trang này bao gồm nhiều thông tin hơn về vấn đề bao gồm các ví dụ.

Phần "Không gian phân đoạn và Dấu nước cao" từ Hướng dẫn về khái niệm cũng có thể hữu ích.


9

Vâng, nó sẽ là do sự phân mảnh.

Để lấy lại không gian, trước tiên hãy lấy danh sách các bảng trong không gian bảng với truy vấn sau (bỏ qua phân vùng - chỉnh sửa câu hỏi của bạn nếu bạn đang sử dụng chúng):

select distinct table_name from dba_tables where tablespace_name = 'DATA';

Sau đó, cho mỗi bảng, kích hoạt chuyển động hàng:

alter table TABLEINDATAPARTITION enable row movement;

Sau đó bạn có thể thu nhỏ bảng:

alter table TABLEINDATAPARTITION shrink space;

Sau đó thu nhỏ các tệp dữ liệu với:

alter database datafile '/path/to/my/file/data01.dbf' resize 20480M;

Tên datafile có thể được lấy từ DBA_DATA_FILESkhung nhìn mà bạn đã biết.


Tuyệt vời, một câu trả lời thiết thực. +1
Leigh Riffel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.