Dalam DB2 saya punya tabel yang berisi data biner besar. Sekarang saya membersihkan seluruh tabel dan menjalankan runstats, reorg, runstats, tetapi jumlah ruang disk yang diambil tidak berubah. Apa yang salah di sini?
Tabel berada di tablespace sendiri yang saya buat sebagai berikut:
CREATE BUFFERPOOL "MY_BP" SIZE 250 AUTOMATIC PAGESIZE 4096;
CREATE LARGE TABLESPACE MY_TBS IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 4096 MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 64 PREFETCHSIZE 64 BUFFERPOOL MY_BP OVERHEAD 10.500000 TRANSFERRATE 0.140000 FILE SYSTEM CACHING;
Saya menghapus / me-reorg sebagai berikut:
DELETE FROM MY_TBL
RUNSTATS ON TABLE MY_TBL WITH DISTRIBUTION AND DETAILED INDEXES ALL
REORG TABLE MY_TBL
RUNSTATS ON TABLE MY_TABLE WITH DISTRIBUTION AND DETAILED INDEXES ALL
ALTER TABLESPACE MY_TBS REDUCE
Tabel MY_TBL mengambil 2,5GB sebelum semua itu dan setelah menghapus / reorging menggunakan hanya 3 MB lebih sedikit.
FWIW: Saya menjalankan DB2 / NT v9.5.2.
db2
maintenance
database-size
db2-luw
size
Alexander Tobias Bockstaller
sumber
sumber
Jawaban:
Saya akan menebak bahwa Anda menggunakan penyimpanan otomatis. (Bukan berarti ini bisa terjadi sebaliknya ... hanya saja mudah terjadi dengan penyimpanan otomatis.)
Masalahnya adalah kemungkinan besar bahwa database Anda mengambil kembali ruang untuk dirinya sendiri tetapi tidak melepaskan disk kembali ke sistem operasi. Ini dapat ditampilkan dengan sangat mudah dengan memeriksa Tanda Air Tinggi untuk tablespace.
Lakukan yang berikut ini
db2 list tablespaces show detail
Ini akan menunjukkan kepada Anda setiap tablespace dan apa yang digunakan pada disk.
Used pages
adalah berapa banyak halaman disk yang digunakan database. Membandingkannya dengantotal pages
(total diklaim pada disk) danHigh water mark (pages)
akan menunjukkan kepada Anda jika Anda "mengklaim" lebih dari yang sebenarnya Anda butuhkan. (yaitu, halaman yang digunakan rendah, halaman total sangat tinggi dan Tanda Air Tinggi dekat dengan halaman total).Untuk menyingkirkan ruang yang tidak terpakai ini dan mengembalikannya ke sistem operasi Anda akan mengeluarkan berikut (di bawah penyimpanan otomatis):
db2 alter tablespace <tablespace name> reduce max
. contohItu akan menyebabkan DB2 menurunkan tanda air tinggi dan melepaskan disk yang tidak digunakan kembali ke sistem operasi. (Catatan Anda hanya bisa melakukan ini untuk tablespace reguler dan tablespace besar, bukan untuk sistem sementara, atau tablespace sementara pengguna).
Jika Anda menggunakan DMS tanpa penyimpanan otomatis, Anda perlu menggunakan serangkaian perintah yang sedikit berbeda:
contoh
Di tempat kami bekerja, kami menempatkan ini ke dalam beberapa skrip pemeliharaan kami sehingga kami menjalankan ini secara otomatis setelah kami melakukan reorg untuk memastikan kami mendapatkan kembali ruang disk. Dalam kasus kami, kami menggunakan DB2 LUW 9.7 FP 4, jadi tidak ada salahnya untuk memeriksa kembali Pusat Informasi untuk 9.5 untuk memastikan Anda memiliki akses ke informasi yang tepat untuk versi Anda.
sumber
alter tablespace <tbsp> lower high watermark
ataualter tablespace <tbsp> reduce max
sintaksis - ini tidak diperkenalkan sampai DB2 9.7.Tabel ini
MY_TBL
berisi data biner besar dalam sebuahBLOB
kolom. DokumentasiREORG
perintah mengatakan bahwa DB2 menghindari menata ulang objek seperti itu karena memakan waktu dan tidak meningkatkan pengelompokan. Namun, DB2 dapat dipaksa untuk mengatur ulang data LOB jikaLONGLOBDATA
opsi tersebut ditentukan. Ruang yang tidak digunakan dapat digunakan kembali oleh DB2, jadi menyisipkan data baru akan terlebih dahulu mengisi halaman yang ada dan tidak terpakai sebelum mengalokasikan yang baru.Lari
berhasil mereklamasi 2.5GB ruang disk yang digunakan tabel kosong.
Saya tidak tahu tentang opsi ini dan melihatnya pertama kali saya membaca dokumentasi.
sumber