Không gian mà bảng sử dụng không được phát hành hoàn toàn sau khi bạn sử dụng một câu lệnh DELETE để xóa dữ liệu khỏi bảng trong SQL Server


Bug #: 219514 (SQL Server 8,0)

Triệu chứng


Sau khi bạn sử dụng một câu lệnh DELETE trong Microsoft SQL Server để xóa dữ liệu khỏi bảng, bạn có thể nhận thấy rằng không gian mà bảng sử dụng sẽ không được phát hành hoàn toàn. Khi bạn tìm cách chèn dữ liệu trong cơ sở dữ liệu, bạn có thể nhận được thông báo lỗi sau đây:
Không thể phân bổ không gian cho đối tượng 'tablename' trong cơ sở dữ liệu 'databasename' vì nhóm ' chính ' filegroup đầy.
Ghi chú tablename đại diện cho tên của bảng. Databasename đại diện cho tên của cơ sở dữ liệu có chứa bảng.

Nguyên nhân


Vấn đề này xảy ra vì SQL Server chỉ phát hành tất cả các trang có bảng heap dùng khi các điều kiện sau đây là đúng:
  • Việc xóa bảng này xảy ra.
  • Khóa cấp độ bảng được tổ chức.
Lưu ý Bảng heap là bất kỳ bảng nào không được liên kết với chỉ mục nhóm. Nếu các trang không phải là deallocated, các đối tượng khác trong cơ sở dữ liệu không thể tái sử dụng các trang. Tuy nhiên, khi bạn bật cấp độ lập phiên bản dựa trên một cơ sở dữ liệu SQL Server 2005, các trang không thể được phát hành ngay cả khi một khóa cấp độ bảng được tổ chức. Để biết thêm thông tin về các mức lập phiên bản dựa trên nền tảng, hãy xem mục "dùng các mức phân tách dựa trên hàng phiên bản trên nền tảng" chủ đề trong SQL Server 2005 sách trực tuyến.

Cách giải quyết


Để giải quyết vấn đề này, hãy sử dụng một trong các phương pháp sau đây:
  • Đưa vào một gợi ý TABLOCK trong câu lệnh DELETE nếu cấp độ lập phiên bản dựa trên hàng không được kích hoạt. Ví dụ, sử dụng một câu lệnh tương tự như sau:
    DELETE FROM <TableName> WITH (TABLOCK)
    Lưu ý<tablename> đại diện cho tên của bảng.
  • Sử dụng câu lệnh bảng TRUNCATE nếu bạn muốn xóa tất cả các bản ghi trong bảng. Ví dụ, sử dụng một câu lệnh tương tự như sau:
    TRUNCATE TABLE <TableName>
  • Tạo chỉ mục nhóm trên một cột của bảng. Để biết thêm thông tin về cách tạo chỉ mục liên cụm trên bảng, hãy xem chủ đề "tạo chỉ mục" trong danh sách SQL Server trực tuyến.

Trạng thái


Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".