Ya Tuhan, kurasa aku telah melihat semuanya. Lebih sering daripada tidak itu merupakan upaya untuk memperbaiki masalah kinerja oleh seseorang yang terlalu malas untuk memecahkan masalah mereka hingga PENYEBAB masalah kinerja tersebut atau bahkan meneliti apakah sebenarnya ada masalah kinerja. Dalam banyak kasus ini saya bertanya-tanya apakah itu bukan hanya kasus orang yang ingin mencoba teknologi tertentu dan mati-matian mencari paku yang sesuai dengan palu baru mereka yang mengkilap.
Berikut ini contoh terbaru:
Arsitek data datang kepada saya dengan proposal yang rumit untuk mempartisi tabel kunci secara vertikal dalam aplikasi yang cukup besar dan kompleks. Dia ingin tahu jenis upaya pengembangan apa yang diperlukan untuk menyesuaikan perubahan. Percakapan berlangsung seperti ini:
Saya: Mengapa Anda mempertimbangkan ini? Apa masalah yang Anda coba selesaikan?
Dia: Tabel X terlalu luas, kami mempartisi untuk alasan kinerja.
Aku: Apa yang membuatmu berpikir itu terlalu lebar?
Dia: Konsultan mengatakan terlalu banyak kolom dalam satu tabel.
Saya: Dan ini mempengaruhi kinerja?
Dia: Ya, pengguna telah melaporkan pelambatan berselang di modul XYZ aplikasi.
Saya: Bagaimana Anda tahu lebar tabel adalah sumber masalahnya?
Dia: Itu adalah tabel kunci yang digunakan oleh modul XYZ, dan itu seperti 200 kolom. Itu pasti masalahnya.
Saya (Menjelaskan): Tetapi modul XYZ secara khusus menggunakan sebagian besar kolom dalam tabel itu, dan kolom yang digunakannya tidak dapat diprediksi karena pengguna mengonfigurasi aplikasi untuk menampilkan data yang ingin ditampilkan dari tabel itu. Sangat mungkin bahwa 95% dari waktu kita akhirnya bergabung dengan semua tabel kembali bersama yang akan merusak kinerja.
Dia: Konsultan mengatakan itu terlalu luas dan kita perlu mengubahnya.
Saya: Siapa konsultan ini? Saya tidak tahu kami menyewa konsultan, juga tidak berbicara dengan tim pengembang.
Dia: Yah, kita belum mempekerjakan mereka. Ini adalah bagian dari proposal yang mereka tawarkan, tetapi mereka bersikeras kami perlu merancang kembali database ini.
Saya: Uh huh. Jadi konsultan yang menjual jasa desain ulang basis data berpikir kita memerlukan desain ulang ...
Percakapan terus berlanjut seperti ini. Setelah itu, saya melihat lagi tabel yang dimaksud dan memutuskan bahwa itu mungkin bisa dipersempit dengan normalisasi sederhana tanpa perlu strategi partisi yang eksotis. Ini, tentu saja ternyata menjadi titik diperdebatkan setelah saya menyelidiki masalah kinerja (sebelumnya tidak dilaporkan) dan melacaknya ke dua faktor:
- Indeks tidak ada pada beberapa kolom utama.
- Beberapa analis data jahat yang secara berkala mengunci tabel kunci (termasuk tabel "terlalu luas") dengan menanyakan database produksi secara langsung dengan MSAccess.
Tentu saja arsitek masih mendorong partisi vertikal dari tabel yang bergantung pada meta-masalah "terlalu lebar". Dia bahkan memperkuat kasusnya dengan mendapatkan proposal dari konsultan basis data lain yang dapat menentukan bahwa kami memerlukan perubahan desain besar pada basis data tanpa melihat aplikasi atau menjalankan analisis kinerja.