Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mySQL partisi multi-file vs kinerja satu file?

Seperti yang telah Anda nyatakan -innodb_file_per_table akan memutuskan apakah satu tabel akan disimpan dalam satu file atau (jika dipartisi) dalam banyak file.

Berikut adalah beberapa pro dan kontra dari setiap pendekatan (tidak perlu daftar lengkap).

Single file per table                    Multiple files per (partitioned) table
--------------------------------------   --------------------------------------
+ System uses less filehandles           - System uses more filehandles
+ One one fsync per second per table     - Possibly many more fsync calls (bottleneck)
  (less fs overhead (journal etc))         (more fs overhead)
+ Single file uses less space overall    - Much larger disk space usage
- Single file fragments badly            + Less fragmentation 
- Optimize table (et al) takes longer    + You can choose to optimize just one file
- One file = one filesystem              + You can put heavy traffic files on a fast fs
                                           (e.g. on a solid state disk)
- Impossible to reclaim disk space       + possible to emergency-reclaim disk space 
  in a hurry (truncate table takes long)   fast (just delete a file)
- ALTER TABLE can use large % of disk-   + rebuilding with ALTER TABLE will use less
  space for temp tables while rebuilding   temp disk space

Secara umum saya tidak merekomendasikan beberapa file.
Namun, jika beban kerja Anda menyebabkan fragmentasi berat dan optimize table memakan waktu terlalu lama, menggunakan banyak file akan masuk akal.

Lupakan tentang merebut kembali ruang
Beberapa orang membuat banyak keributan tentang fakta bahwa dalam file tabel InnoDB selalu bertambah dan tidak pernah menyusut, yang mengarah ke ruang terbuang jika baris dihapus.
Kemudian mereka datang dengan skema untuk merebut kembali ruang itu sehingga untuk tidak kehabisan ruang disk kosong. (truncate table x ).
Ini akan bekerja lebih cepat dengan banyak file, namun semua ini tidak masuk akal, karena database hampir selalu bertambah dan (hampir) tidak pernah menyusut, sehingga semua reklamasi ruang akan membuang banyak waktu (CPU dan IO) selama dengan meja Anda akan sepenuhnya terkunci (tidak membaca dan menulis tidak diperbolehkan).
Hanya untuk menemukan bahwa 90% disk penuh Anda (50% setelah reclaim) akan 99% penuh setelah penambahan data bulan depan.

Namun saat menggunakan ALTER TABLE hati-hati...
Pertimbangkan skenario berikut:
- Disk 60% penuh.
- database membutuhkan 50%, file lain menghabiskan 10%.
Jika Anda melakukan alter table di meja mana pun, Anda akan kehabisan ruang disk jika Anda memiliki semua tabel dalam satu file.
Jika Anda memilikinya di banyak file, Anda seharusnya tidak mengalami masalah (selain overdosis kafein dari semua penantian itu).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql membandingkan bidang yang dipisahkan koma dengan string tunggal

  2. Konfigurasi MySQL yang optimal (my.cnf)

  3. Bagaimana saya bisa menyimpan array nilai boolean dalam database MySql?

  4. Tampilkan semua tanggal antara, bahkan jika tidak ada hasil

  5. MySQL mengembalikan nilai maksimal atau nol jika satu kolom tidak memiliki nilai