Apakah Anda memikirkan sesuatu ketika Anda membuat database baru? Saya kira sebagian besar dari Anda akan mengatakan tidak, karena kita semua menggunakan parameter default, meskipun mereka jauh dari optimal. Namun, ada banyak pengaturan disk, dan itu benar-benar membantu meningkatkan keandalan dan kinerja sistem.
Kami tidak akan berbicara tentang pentingnya sistem file NTFS untuk keandalan data, meskipun sistem file ini memungkinkan MS SQL Server untuk menggunakan disk dengan cara yang paling efektif.
Jika Anda kekurangan sumber daya dan sesuatu mulai bekerja lambat, hal pertama yang terlintas dalam pikiran adalah memutakhirkan. Tetapi peningkatan tidak diperlukan dalam setiap kasus. Anda dapat lolos dari penyetelan, meskipun hal itu harus dilakukan bukan saat server mulai berjalan lambat, tetapi pada tahap desain dan pemasangan.
Optimalisasi adalah proses yang kompleks dan sering kali tidak hanya terkait dengan program tertentu (dalam kasus kami, ke database tertentu) tetapi juga dengan OS dan perangkat keras. Meskipun kita sebagian besar akan berbicara tentang database, kita tidak dapat mengabaikan hal-hal luar.
Arsitektur Data
SQL Server menyimpan, membaca, dan menulis data dengan blok masing-masing 8 KB. Blok ini disebut halaman. Sebuah database dapat menyimpan 128 halaman per megabyte (1 megabyte atau 1048576 byte dibagi 8 kilobyte atau 8192 byte). Semua halaman disimpan dalam batas tertentu. Luasnya adalah 8 halaman berurutan terakhir atau 64 KB. Jadi, 1 megabyte menyimpan 16 tingkat.
Halaman dan luasan adalah dasar dari struktur database fisik SQL Server. MS SQL Server menggunakan berbagai jenis halaman, beberapa di antaranya melacak ruang yang dialokasikan, beberapa berisi data pengguna dan indeks. Halaman yang melacak ruang yang dialokasikan berisi data terkompresi padat. Hal ini memungkinkan MS SQL Server untuk secara efektif menyimpannya dalam memori agar mudah dibaca.
SQL Server menggunakan dua jenis perluasan:
- Ekstensi yang menyimpan halaman dari dua hingga banyak objek disebut luasan campuran. Setiap tabel dimulai sebagai tingkat campuran. Anda menggunakan tingkat campuran terutama untuk halaman yang menyimpan ruang dan berisi objek kecil.
- Ekstensi yang memiliki 8 halaman yang dialokasikan ke satu objek disebut luasan seragam. Mereka digunakan ketika tabel atau indeks membutuhkan lebih dari 64 KB.
Tingkat pertama untuk setiap file adalah satu seragam dan berisi halaman dari file header, tingkat berikutnya berisi 3 halaman yang dialokasikan masing-masing. Server mengalokasikan luasan campuran ini saat Anda membuat file data dasar dan menggunakan halaman ini untuk tugas internalnya. Halaman header file berisi atribut file, seperti nama database yang disimpan dalam file, filegroup, ukuran minimum, ukuran kenaikan. Ini adalah halaman pertama setiap file (halaman 0).
Rencana Eksekusi Kueri di SQL Query Analyzer
Ruang Kosong Halaman (PFS ) di halaman yang dialokasikan yang berisi informasi tentang ruang kosong yang tersedia di file. Informasi ini disimpan di halaman 1. Setiap halaman tersebut dapat diperluas hingga 8000 halaman yang berdekatan, yaitu sekitar 64 Mb data.
Log transaksi mengumpulkan semua informasi tentang perubahan yang terjadi di server untuk memulihkan database pada saat terjadi kesalahan sistem dan untuk memastikan integritas data.
Perhatikan bahwa semua angka adalah kelipatan 8 atau 16. Ini karena pengontrol hard disk membaca data dengan ukuran ini dengan lebih mudah. Data dibaca dari disk per halaman, yaitu sebesar 8 kilobyte, yang merupakan nilai yang cukup optimal.
Perlindungan Halaman
Mulai dari MS SQL Server 2005, server database memiliki opsi baru – kontrol data tingkat halaman. Jika USIA_VERIFY_CHECKSUM parameter diaktifkan (diaktifkan secara default), server akan mengontrol checksum halaman. Jika kita melihat ke manual untuk parameter ini, kita akan melihat bahwa checksum memungkinkan pelacakan kesalahan input/output yang tidak dapat dilacak oleh OS. Apa jenis kesalahan mereka? Sepertinya itu adalah masalah internal dari server database.
Pemeriksaan integritas data tidak pernah salah, jadi lebih baik mengaktifkannya. Untuk ini, kita perlu menjalankan perintah berikut:
ALTER DATABASE имя базы SET PAGE_VERIFY
Jika ada kesalahan pada halaman, server akan memberi tahu kami tentang hal itu. Tapi bagaimana kita bisa memperbaikinya dengan cepat? Ada opsi untuk memulihkan data di tingkat halaman untuk ini.
Rencana Eksekusi Grafis
Pertumbuhan File
Saat kami membuat database, kami diminta untuk memilih ukuran awal dan metode kenaikan. Ketika kita kekurangan ruang saat ini, server memperluasnya sesuai dengan metode peningkatan yang telah ditetapkan.
Ada tiga metode peningkatan untuk file:
- Pertumbuhan dalam megabita.
- Pertumbuhan menurut persen.
- Pertumbuhan manual.
Dua metode pertama dilakukan secara otomatis, tetapi hanya direkomendasikan untuk database pengujian karena administrator tidak memiliki kendali atas ukuran file.
Jika file bertambah dengan jumlah megabita tertentu, pada titik tertentu, kecepatan penyisipan data dapat meningkat dan pertumbuhan file menjadi terlalu sering, dan ini adalah biaya tambahan. Pertumbuhan file dalam persen juga tidak menguntungkan. Disarankan untuk menggunakan pertumbuhan file 10% dan ini OK untuk database kecil dan menengah. Namun ketika mencapai 1000 gigabyte, dibutuhkan 100 gigabyte pada setiap pertumbuhannya. Ini akan menyebabkan pemborosan ruang disk yang tidak berarti.
Selalu kendalikan perubahan ukuran file dan log transaksi. Ini akan memungkinkan Anda untuk menggunakan sumber daya disk dengan cara yang paling efektif.
Properti Database MS SQL Server
Kompresi Data
Hard drive tetap menjadi tempat yang masuk akal dari sebuah komputer. Kinerja prosesor tumbuh pesat, sementara hard disk tidak dapat menawarkan sesuatu yang baru. Untuk menghemat jumlah operasi input/output dan mengurangi data yang disimpan di hard disk, Anda dapat menggunakan disk dengan kompresi. Hanya disk seperti itu yang baik untuk menyimpan grup file hanya-baca. Mungkin karena kompresi diperlukan untuk penulisan, dan membutuhkan biaya prosesor tambahan.
Kompresi data dan status read-only baik untuk data arsip. Misalnya, data akuntansi selama beberapa tahun terakhir tidak diperlukan untuk penulisan dan dapat memakan terlalu banyak ruang. Dengan menempatkan data pada bagian arsip pada disk, Anda akan sangat menghemat ruang.
Disk untuk Keandalan
Metode berikut memungkinkan peningkatan keandalan dan kinerja pada saat yang sama, dan sekali lagi, ini terkait dengan hard drive. Nah, ini dia, mekanik bukan hanya yang paling lambat tapi juga paling tidak bisa diandalkan. Untuk keandalan, saya tidak mengumpulkan statistik, tetapi baik di rumah maupun di tempat kerja, saya kebanyakan berurusan dengan hard drive.
Jadi, untuk meningkatkan kinerja dan keandalan, Anda cukup menggunakan dua atau lebih hard drive, bukan satu. Akan lebih baik lagi jika mereka akan terhubung ke pengontrol yang terpisah. Anda dapat menyimpan database di satu disk, dan log transaksi di disk lain. Jika ada disk ketiga, itu dapat menyimpan sistem.
Menyimpan data dan log pada disk terpisah memungkinkan Anda meningkatkan keandalan secara signifikan. Misalkan Anda memiliki semuanya di satu disk dan itu turun. Apa yang harus dilakukan? Anda dapat menghubungi perusahaan yang akan mencoba memulihkan semuanya atau mencoba melakukan hal yang sama sendiri, tetapi peluang pemulihannya jauh dari 100%. Selain itu, mengembalikan server untuk bekerja mungkin membutuhkan banyak waktu. Pemulihan cepat dapat dilakukan hanya pada saat salinan cadangan terakhir. Sisanya dipertanyakan.
Dan sekarang, misalkan Anda memiliki data dan log transaksi pada disk yang berbeda. Jika disk dengan log mati, data akan tetap ada. Satu-satunya hal adalah Anda tidak dapat menambahkan data baru, tetapi jika Anda membuat log baru, Anda dapat terus bekerja.
Jika disk dengan data mati, kami masih dapat memesan log transaksi untuk mencegah kehilangan data terkecil. Setelah itu, kami memulihkan data dari cadangan lengkap (harus selalu dilakukan sebelumnya, administrator yang baik melakukan ini setidaknya sekali sehari) dan menambahkan perubahan dari salinan cadangan log.
Disk untuk Performa
Jika data dan log terletak pada disk yang terpisah, itu berarti tidak hanya keamanan tetapi juga pertumbuhan kinerja. Masalahnya adalah server database dapat secara bersamaan menulis data ke dalam log dan file data.
Kita dapat melangkah lebih jauh dan mengalokasikan satu hard drive ke log transaksi dan beberapa hard drive ke data. Server bekerja dengan data lebih sering, oleh karena itu memerlukan beberapa penyimpanan yang dapat Anda gunakan secara bersamaan. Dan jika penyimpanan ini terhubung ke pengontrol yang berbeda, pekerjaan simultan dijamin.
Varian tercepat dan paling andal adalah menggunakan RAID . Namun, tidak setiap RAID dapat diandalkan dan cepat pada saat yang bersamaan. Untuk grup file, disarankan untuk memilih RAID10 , karena berisi fitur yang seimbang, tetapi tergantung pada data database, Anda dapat memilih varian lain.
Anda dapat menggunakan solusi perangkat lunak atau perangkat keras sebagai RAID . Solusi perangkat lunak lebih murah, tetapi membutuhkan sumber daya ekstra CPU. Dan prosesor tidak memiliki sumber daya cadangan. Itulah mengapa lebih baik menggunakan solusi perangkat keras di mana chip khusus bertanggung jawab atas RAID .
Indeks
Semua orang tahu bahwa indeks membantu meningkatkan kecepatan pencarian data. Sebagian besar dari kita memahami bahwa indeks memengaruhi penyisipan dan pembaruan data secara negatif, jadi semakin banyak indeks yang Anda miliki, semakin sulit bagi server untuk memeliharanya. Pada saat itu, tidak banyak yang berpikir bahwa indeks memerlukan pemeliharaan. Halaman database yang berisi data indeks dapat meluap dan akhirnya menjadi tidak seimbang.
Ya, kita dapat mengabaikan berbagai parameter dan hanya membuat ulang indeks sebulan sekali, yang mirip dengan pemeliharaan. SQL Server menyertakan dua parameter yang mencegah indeks kedaluwarsa dalam waktu setengah jam setelah pembuatannya:FILLFACTOR dan PAD_INDEX .
Anda dapat menggunakan opsi FILLFACTOR untuk mengoptimalkan kinerja operasi penyisipan dan pembaruan yang berisi indeks berkerumun atau tidak berkerumun. Data indeks dapat disimpan di banyak halaman data. Seperti yang saya sebutkan di atas, setiap halaman terdiri dari 8 KB. Ketika halaman indeks penuh, server membuat halaman baru dan membagi halaman untuk penyisipan data menjadi dua.
Server membutuhkan waktu untuk pembagian halaman dan pembuatan halaman baru. Untuk mengoptimalkan pembagian halaman, gunakan FILLFACTOR opsi untuk menentukan persentase ruang kosong di semua daun halaman indeks. Semakin besar ruang disk yang dimiliki halaman tingkat daun, semakin jarang Anda harus membagi halaman indeks. Pada saat itu, pohon indeks akan terlalu besar dan melewatinya akan membutuhkan waktu ekstra.
PAD_INDEX opsi menunjukkan persentase pengisian halaman non-daun. Anda dapat menggunakan PAD_INDEX hanya jika FILLFACTOR opsi ditentukan sejak nilai persentase PAD_INDEX bergantung pada persentase yang ditentukan dalam FILLFACTOR .
Statistik
Statistik memungkinkan server untuk membuat keputusan yang tepat antara penggunaan indeks dan pemindaian tabel penuh. Misalkan Anda memiliki daftar karyawan toko pengecoran. Daftar tersebut akan dibuat dari sekitar 90% pria.
Sekarang, anggaplah kita perlu menemukan semua wanita. Karena jumlahnya tidak banyak, opsi yang paling efektif adalah menggunakan indeks. Tetapi jika kita perlu menemukan semua pria, efisiensi indeks melambat. Jumlah record yang dipilih terlalu besar dan melewati pohon indeks untuk masing-masing record akan menjadi overhead. Jauh lebih mudah untuk memindai seluruh tabel – eksekusi akan jauh lebih cepat karena server perlu membaca semua lembar indeks tingkat rendah sekali tanpa perlu membaca berulang kali di semua level.
SQL Server mengumpulkan statistik dengan membaca semua nilai bidang atau dengan templat untuk pembuatan daftar nilai yang didistribusikan dan diurutkan secara seragam. SQL Server secara dinamis mendeteksi persentase baris yang harus diuji berdasarkan jumlah baris dalam tabel. Saat mengumpulkan statistik, pengoptimal kueri akan menjalankan pemindaian penuh atau templat baris.
Agar statistik berfungsi, statistik harus dibuat. Dalam kasus pembaruan data besar-besaran, statistik mungkin berisi data yang salah, dan server akan membuat keputusan yang salah. Tetapi semuanya dapat diperbaiki, – Anda perlu memantau statistik. Untuk informasi lebih rinci, lihat buku tentang Transact-SQL atau MS SQL Server.
Ringkasan
Pengaturan default tidak mengizinkan penggunaan semua potensi perangkat keras dan bekerja dengan semua variasi server. Tanggung jawab untuk pengaturan terletak pada administrator. Fakta bahwa produk Microsoft memiliki program penginstalan yang sederhana, utilitas administrasi grafis, dan kemampuan untuk bekerja secara offline tidak berarti bahwa ini adalah varian yang optimal.
Kami tidak menganggap opsi penyetelan basis data seperti itu sebagai akselerasi perangkat keras. Jika semua opsi penyetelan habis, lebih baik untuk memikirkan upgrade, karena akselerasi perangkat keras berdampak negatif pada keandalan sistem.
Yang paling penting adalah bahwa setiap pengoptimalan server database atau peningkatan apa pun tidak akan membantu jika kueri tidak dioptimalkan.