Apakah buruk memiliki hard drive yang sangat penuh pada server database lalu lintas tinggi?

12

Menjalankan server Ubuntu dengan MySQL untuk server database produksi lalu lintas tinggi. Tidak ada yang berjalan di mesin kecuali instance MySQL.

Kami menyimpan cadangan basis data harian di server DB, apakah ada kinerja yang bagus atau alasan mengapa kami harus menjaga hard disk relatif kosong? Jika disk diisi hingga 86% + dengan basis data dan semua cadangan, apakah itu mengganggu kinerja sama sekali?

Jadi apakah server DB berjalan dengan 86-90% + kapasitas penuh berkinerja kurang baik dengan cara apa pun dibandingkan server yang berjalan dengan hanya 10% disk penuh?

Ukuran total disk di server lebih dari 1 TB sehingga bahkan 10% dari disk harus cukup untuk pertukaran O / S dasar dan semacamnya.

MikeN
sumber
1
Data MySQL pada partisi yang sama dengan root (/)? Anda benar-benar tidak ingin itu diisi; kota hancur.
gravyface
1
Saya tidak berpikir ada alasan yang melekat untuk menjaga ruang disk dibersihkan selama data dikelola dengan baik. Omong-omong, mengapa Anda mencadangkan secara lokal? Hal pertama yang saya lakukan adalah mendorong cadangan itu ke kotak lain.
BenC
Perlu diingat bahwa disk yang hampir penuh memiliki risiko downtime untuk layanan tergantung pada database. Jika disk DB penuh, DB akan berhenti. Jadi, semakin sedikit ruang yang tersisa akan menghasilkan risiko downtime yang lebih tinggi.
Mr.T

Jawaban:

11

Pertama-tama, Anda TIDAK ingin menyimpan cadangan basis data di drive fisik atau grup RAID yang sama dengan basis data Anda. Alasan untuk ini adalah bahwa kegagalan disk (jika Anda menjalankan tanpa perlindungan RAID) atau kegagalan RAID bencana (jika Anda menggunakan RAID-1 atau RAID-5) akan menyebabkan Anda kehilangan basis data dan cadangan basis data Anda.

Pertanyaan Anda tentang kinerja disk terkait dengan seberapa penuh drive disk tergantung pada bagaimana data pada disk diakses. Untuk disk pemintalan ada dua faktor fisik yang mempengaruhi kinerja I / O. Mereka:

  • seek time - waktu yang diperlukan drive disk untuk memindahkan kepala disk dari posisi trek saat ini ke trek yang berisi data yang diminta

  • rotasi latensi - yang merupakan waktu rata-rata yang diperlukan untuk data yang diinginkan untuk mencapai read head saat drive berputar - untuk drive 15K RPM ini adalah 2 ms (milidetik)

Seberapa penuh drive Anda dapat memengaruhi waktu pencarian rata-rata yang dialami I / O server Anda. Misalnya, jika drive Anda penuh dan Anda memiliki tabel database yang secara fisik terletak di drive di ujung yang berlawanan dari piringan disk, maka saat Anda melakukan I / O mengakses data dari masing-masing tabel ini yang akan dialami I / O. waktu pencarian maksimum dari drive.

Namun demikian, jika drive Anda penuh dan aplikasi Anda hanya mengakses sebagian kecil dari data yang disimpan di drive dan semua data ini terletak berdekatan di drive, maka I / O ini akan dipengaruhi secara minimal oleh waktu pencarian .

Sayangnya, jawaban untuk pertanyaan ini adalah "jarak tempuh Anda akan bervariasi", artinya bagaimana aplikasi Anda mengakses data dan di mana data itu berada akan menentukan seperti apa kinerja I / O Anda nantinya.

Juga, seperti yang disebutkan oleh @gravyface, itu akan menjadi "praktik terbaik" untuk memisahkan persyaratan penyimpanan sistem operasi Anda dari database Anda. Sekali lagi, ini akan membantu meminimalkan pergerakan head pada permukaan disk karena memiliki keduanya pada drive yang sama dapat menyebabkan pencarian konstan antara sistem operasi dan area basis data drive karena sistem operasi dan perangkat lunak database membuat permintaan I / O.

HeatfanJohn
sumber
8

Ada dua sudut yang perlu dipertimbangkan di sini: Kinerja dan Robustness.

Dari segi kinerja, umumnya disarankan untuk memiliki spindel disk terpisah (atau grup RAID / set drive) untuk:

  1. Hal-hal OS (binari, log, direktori home, dll.)
  2. Swap space (yang dapat dikombinasikan dengan (1) jika Anda tidak berharap untuk menggunakan swap)
  3. DB Produksi
  4. Log transaksi DB Produksi (jika digunakan)
  5. Database Dumps / backup

Alasan di balik ini cukup mudah: Anda tidak ingin kinerja DB dipengaruhi oleh "hal-hal lain" yang menuntut disk (misalnya jika mesin mulai bertukar banyak dan partisi swap berada di sisi lain disk dari data DB yang Anda punya disk panjang berusaha untuk bersaing dengan).


Dari sudut pandang kekokohan Anda ingin jenis kerusakan yang sama, tetapi untuk alasan yang berbeda: Seperti yang orang lain tunjukkan, Anda tidak ingin cakram yang gagal mengeluarkan DB dan cadangannya (meskipun secara realistis Anda harus menyalin cadangan server tetap jika terjadi kegagalan bencana).

Anda juga ingin menghindari konfigurasi dengan /partisi monolitik yang berisi segalanya - ini adalah kesalahan umum yang disayangkan, tragis, dan mengkhawatirkan yang dibuat di dunia Linux yang tidak dibagi dengan sistem mirip Unix lainnya.
Seperti yang Gravyface katakan dalam komentarnya, jika Anda entah bagaimana berhasil mengisi /sistem Anda hampir pasti macet, dan pembersihan / pemulihan dapat memakan waktu dan mahal jika sistem memiliki satu /partisi daripada hierarki titik pemasangan yang terstruktur dengan baik.

voretaq7
sumber
sedih bahwa banyak distro masih mensetup partisi dengan uber /secara default.
gravyface
@ gravyface Setuju - Saya tahu Ubuntu sekarang (12,04) memberi Anda pilihan antara itu dan tata letak partisi yang tersegmentasi dengan baik. Tidak yakin apa itu default, tapi IMHO ini mungkin salah satu hal terburuk yang dilakukan Linux dalam hal kerusakan pada komunitas Unix: puluhan ribu "sysadmin" yang berpikir satu /partisi raksasa baik-baik saja & harus dilatih ulang ...
voretaq7
5

Saya akan merekomendasikan memindahkan basis data dan cadangan sementara (lihat di bawah) ke partisi yang berbeda dari root (/).

Juga, buatlah skema rotasi / retensi yang masuk akal untuk backup dump database terkompresi Anda. Tidak ada (biasanya) alasan untuk menyimpan banyak salinan cadangan pada disk lokal. Tidak melakukan apa pun untuk pemulihan bencana dan ketika dipindahkan ke luar situs, harus dihapus dari disk.

Itu cukup banyak prosedur operasi standar.

gravyface
sumber
4

Ini mengingatkan saya pada bug di NetApp di mana sistem file yang hampir penuh mengalami penurunan kinerja secara signifikan (seperti setengahnya). (diakui itu beberapa tahun yang lalu).

Jawabannya seperti yang dikatakan semua orang tergantung, tetapi perlu dipikirkan.

Kelemahan utama dari sistem file lengkap adalah daftar inode gratis cenderung terfragmentasi dan di semua tempat.

Ada tiga jenis data yang duduk di hard disk untuk basis data.

  1. File basis data Anda yang sebenarnya. Ini akan menjadi file pra-alokasi besar yang umumnya tumbuh dalam potongan besar (10% misalnya).
  2. Log, log transaksi Anda yang terus menerus ditulis, dihapus, ditulis, dll ...
  3. File sementara untuk permintaan besar yang tidak dapat berjalan di memori.

(1) hanya membutuhkan ruang kosong ketika mengalokasikan lebih banyak ruang untuk set file Anda. Jika basis data Anda tidak bertambah, itu seharusnya tidak terpengaruh oleh sistem file ruang disk rendah. Jika itu mengalokasikan, itu bisa meminta potongan yang sangat besar yang tidak masuk ke dalam daftar gratis yang Anda miliki segera memecah-mecah database Anda dan menyebabkan pencarian ketika perlu data untuk siap ke dalam memori.

(2) implementasi log yang naif di mana ia menggunakan OS untuk mengelola ruang alokasi dan menghapusnya akan menderita. Dengan asumsi database Anda tidak hanya dibaca, akan ada aliran log yang konstan, mereka akan sering terfragmentasi pada ruang hard disk yang rendah. Pada akhirnya ini akan merusak kinerja penulisan Anda.

(3) tempDB, jika DB membutuhkannya untuk permintaan tertulis yang jelek, atau tidak cukup RAM, maka Anda memiliki masalah yang lebih besar daripada ruang disk yang rendah yang menyebabkan masalah kinerja karena bahkan kinerja membaca Anda dapat menjadi disk terikat kemudian. Anda juga menjalankan risiko pemadaman jika MySql perlu mengalokasikan ruang disk untuk tempDB dan hard disk habis.

Tentang cadangan ...

  1. Setiap perusahaan tempat saya bekerja menyimpan cadangan di mesin yang sama. Ketika datang ke pemulihan (siapa yang peduli tentang cadangan, itu mengembalikan yang diperhitungkan). Tidak ada yang bisa mengalahkan kecepatan memiliki file db di sana pada disk yang sama.
  2. Semoga jelas, pastikan cadangannya tidak hanya lokal.

Singkatnya saya akan mengatakan Anda akan bertahan asalkan DB Anda tidak menulis berat. Jika ya, maka ruang disk yang rendah adalah masalah. Tetapi jika saya adalah Anda, saya akan mengerjakan yang berikut lebih cepat daripada nanti.

  1. Mengkonfirmasi saya memiliki RAM yang cukup
  2. Memisahkan log dan semua data sementara dari DB Anda.
  3. Memisahkan OS Anda, MySql Anda instal dari sisanya.

Gunakan spindel dan pengontrol terpisah jika Anda bisa untuk 1.

Diikuti oleh spindle yang terpisah

Diikuti oleh partisi terpisah seorang pria miskin.

M Afifi
sumber
0

Saya memiliki masalah yang sama baru-baru ini ketika saya menggunakan semua ruang disk di salah satu server replikasi saya. Efek langsungnya adalah replikasi macet dan kemudian saya tidak bisa masuk ke MySQL karena file mysqld.sock tidak bisa dibuka.

hlosukwakha
sumber