Anda akan melakukan 3 jenis penyetelan, 1 reaktif dan 2 proaktif.
Reaktif
Tiba-tiba, beberapa permintaan mulai menyebabkan masalah bagi Anda. Mungkin karena bug atau fitur aplikasi, tabel yang tumbuh melebihi harapan, lonjakan lalu lintas, atau pengoptimal kueri yang menjadi "kreatif". Ini bisa menjadi jenis perselingkuhan oh-omong kosong tengah malam, atau bisa juga sebagai respons terhadap kelambatan sistem yang sifatnya tidak kritis. Either way, karakter yang menentukan tuning reaktif adalah bahwa Anda sudah memiliki masalah . Tak perlu dikatakan, Anda ingin melakukan ini sesedikit mungkin. Yang membawa kita ke ...
Proaktif
Tipe 1: Perawatan Rutin
Pada beberapa jenis jadwal, setiap beberapa bulan atau minggu tergantung pada seberapa sering skema Anda berubah dan seberapa cepat data Anda tumbuh, Anda harus meninjau output dari alat analisis kinerja database Anda (misalnya laporan AWR untuk Oracle DBAs). Anda sedang mencari masalah yang baru jadi, yaitu hal-hal yang dalam perjalanan mereka membutuhkan penyetelan Reaktif, serta buah yang menggantung rendah, barang-barang yang kemungkinan tidak akan menimbulkan masalah segera tetapi dapat ditingkatkan dengan sedikit usaha dengan harapan mencegah jauh Masalah masa depan. Berapa banyak waktu yang Anda habiskan untuk ini akan tergantung pada berapa banyak waktu yang Anda miliki, dan apa lagi yang bisa Anda habiskan untuk itu, tetapi jumlah optimal tidak pernah nol. Namun, Anda dapat dengan mudah mengurangi jumlah yang harus Anda keluarkan dengan melakukan lebih banyak ...
Tipe 2: Desain Yang Tepat
Nasihat Knuth terhadap "optimasi prematur" secara luas dikenal dan dihormati. Tetapi definisi yang tepat dari "prematur" harus digunakan. Beberapa pengembang aplikasi, ketika diizinkan untuk menulis pertanyaan mereka sendiri, memiliki kecenderungan untuk mengadopsi permintaan pertama yang mereka temukan yang secara logis benar, dan tidak memedulikan kinerja, saat ini atau di masa depan. Atau mereka dapat menguji terhadap set data pengembangan yang tidak mewakili lingkungan produksi (tip: Jangan lakukan ini! Pengembang harus selalu memiliki akses ke data realistis untuk pengujian.). Intinya adalah bahwa waktu yang tepat untuk menyelaraskan kueri adalah ketika pertama kali digunakan, bukan ketika itu muncul pada daftar SQL berkinerja buruk, dan jelas bukan ketika itu menyebabkan masalah kritis.
Jadi apa yang akan memenuhi syarat sebagai optimasi dini di tanah DBA? Di bagian atas daftar saya akan mengorbankan normalisasi tanpa kebutuhan yang ditunjukkan. Tentu Anda dapat mempertahankan jumlah pada baris induk daripada menghitungnya saat runtime dari baris anak, tetapi apakah Anda benar-benar perlu melakukannya? Jika Anda Twitter atau Amazon, de-normalisasi strategis dan pra-perhitungan dapat menjadi teman terbaik Anda. Jika Anda merancang sedikit basis data akuntansi untuk 5 pengguna, struktur yang tepat untuk memfasilitasi integritas data perlu menjadi prioritas utama. Optimalisasi prematur lainnya juga merupakan masalah prioritas. Jangan menghabiskan berjam-jam men-tweak permintaan yang dijalankan sekali sehari dan membutuhkan waktu 10 detik, bahkan jika Anda pikir Anda dapat memotongnya menjadi 0,1 detik. Mungkin Anda memiliki laporan yang berjalan selama 6 jam setiap hari, tetapi jelajahi penjadwalan sebagai pekerjaan batch sebelum menginvestasikan waktu dalam menyetelnya. Jangan berinvestasi dalam contoh pelaporan yang direplikasi dan real-time yang terpisah jika beban produksi Anda tidak pernah mengapung di atas 10% (dengan asumsi Anda dapat mengelola keamanan).
Dengan menguji terhadap data realistis, mengambil tebakan edukasi pada pola pertumbuhan dan lalu lintas (ditambah kelonggaran untuk lonjakan), dan menerapkan pengetahuan Anda tentang keanehan pengoptimal platform Anda, Anda dapat menggunakan kueri yang menjalankan (hampir) secara optimal bukan hanya sekarang, tetapi di masa mendatang. , dan dalam kondisi yang kurang ideal. Ketika Anda menerapkan teknik yang tepat, kinerja kueri dapat diprediksi secara akurat, dan dioptimalkan (dalam arti setiap komponen secepat yang diperlukan).
(Dan saat Anda berada di sana, pelajari statistik! )