Mempartisi pada satu grup file tunggal

10

Saya memiliki beberapa tabel yang sangat besar dalam database saya, tetapi sebagian besar dari data ini adalah "lama".

Karena keadaan di luar kendali saya, saya tidak diizinkan untuk menghapus data "lama" ini. Keterbatasan lainnya adalah saya tidak bisa memodifikasi database, artinya menambahkan filegroup ke dalamnya. Cara semuanya berdiri sekarang, semuanya berada di PRIMARYgrup file.

Saya berpikir untuk mem-partisi tabel-tabel ini menjadi beberapa partisi, seperti "baru", "lama", "diarsipkan" dan sejenisnya. Saya memiliki kolom "status" yang ingin saya gunakan untuk tujuan ini.

Mengingat skenario dan batasan yang dijelaskan, saya bertanya-tanya apakah partisi masuk akal di sini. Dengan kata lain, jika tabel saya dipartisi dengan cara ini, tetapi semua partisi berada di filegroup yang sama, SQL Server akan cukup pintar untuk menemukan area khusus di file yang mendasarinya di mana data "baru" saya berada dan tidak menyentuh area dengan data "lama"?

Dengan kata lain, jika, katakanlah, 80% dari data saya "lama". Apakah SQL Server memiliki mekanisme untuk menghindari mengakses 100% dari file yang mendasarinya dan mengakses hanya 20% yang berisi data "baru" (dengan asumsi, tentu saja, saya menentukan kolom partisi saya di WHEREklausa pertanyaan).

Saya kira untuk menjawab ini, orang perlu memahami bagaimana partisi diterapkan secara internal. Saya menghargai petunjuk apa pun.

Paul White 9
sumber

Jawaban:

6

Ada dua keuntungan untuk mempartisi tabel di filegroup yang sama:

  1. Mengizinkan sebagian indeks besar dibangun kembali secara bertahap, memungkinkan pemeliharaan yang lebih efisien. Tinjau ALTER INDEX [foo] REBUILD PARTITION=nuntuk lebih jelasnya.
  2. Memanfaatkan penghapusan partisi dan (mungkin) penguncian tingkat partisi untuk meningkatkan pemeliharaan kueri. Saya membahas ini di blog saya .

Ada beberapa hal yang perlu diingat jika Anda mempartisi.

  • Jika tabel Anda memiliki indeks berkerumun (dan memang seharusnya), kunci partisi Anda harus menjadi bagian dari indeks berkerumun.
  • Untuk menghindari masalah kinerja, Anda harus menyelaraskan partisi Anda. Ini berarti semua indeks Anda harus menyertakan kunci partisi Anda, apakah sebagai bagian atau sebagai bagian dari indeks itu sendiri.
  • Pembuatan ulang indeks untuk partisi sedang offline dalam versi SQL Server saat ini (2005-2012). Jika partisi Anda terlalu besar dan pembangunan kembali Anda berdasarkan partisi, ini dapat menyebabkan masalah pemblokiran.

Saya sarankan melakukan riset menyeluruh tentang partisi sebelum mengimplementasikannya. Kendra Little memiliki daftar sumber daya yang luar biasa di mana Anda dapat memulai.

Mike Fal
sumber
Jika saya telah mempartisi indeks Clustered, tidak semua indeks non-cluster sudah mengandung kolom partisi sebagai pencari baris?
Zikato
0

Jawabannya iya". Itu memang memiliki mekanisme pada kueri yang menyaring input berdasarkan logika yang digunakan untuk mendefinisikan partisi.

Anda harus memiliki filter yang sesuai, atau semua partisi akan dipindai. Ini biasanya melibatkan memiliki filter tanggal (dalam kasus Anda) untuk memilih partisi.

Salah satu cara untuk menegakkan ini adalah memiliki pandangan yang mengakses hanya satu partisi, dengan logika yang benar dalam tampilan.

Gordon Linoff
sumber
Saya ingin tahu berapa kenaikan kinerja untuk mempartisi ke disk fisik yang sama ..
sotn