Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mySQL phân vùng đa tệp so với hiệu suất một tệp?

Như bạn đã nêu -innodb_file_per_table sẽ quyết định xem một bảng sẽ được lưu trữ trong một tệp hay (nếu được phân vùng) trong nhiều tệp.

Dưới đây là một số ưu và nhược điểm của từng cách tiếp cận (không cần thiết phải có danh sách đầy đủ).

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

Nói chung, tôi sẽ không đề xuất nhiều tệp.
Tuy nhiên, nếu khối lượng công việc của bạn dẫn đến phân mảnh nặng thì optimize table mất quá nhiều thời gian, sử dụng nhiều tệp sẽ có ý nghĩa.

Quên việc lấy lại không gian
Một số người nói nhiều về thực tế là trong bảng InnoDB, các tệp bảng luôn phát triển và không bao giờ thu nhỏ, dẫn đến lãng phí không gian nếu các hàng bị xóa.
Sau đó, họ nghĩ ra các kế hoạch để lấy lại không gian đó sao cho để không hết dung lượng đĩa trống. (truncate table x ).
Điều này sẽ hoạt động nhanh hơn nhiều với nhiều tệp, tuy nhiên tất cả những điều này đều vô nghĩa, bởi vì cơ sở dữ liệu hầu như luôn phát triển và (hầu như) không bao giờ bị thu hẹp, vì vậy tất cả những gì giành lại không gian sẽ lãng phí rất nhiều thời gian (CPU và IO) trong quá trình với bảng của bạn sẽ bị khóa hoàn toàn (không cho phép đọc và không cho phép ghi).
Chỉ khi thấy rằng 90% đĩa đầy đủ của bạn (50% sau khi xác nhận lại) sẽ đầy 99% sau khi bổ sung dữ liệu trong tháng tới.

Tuy nhiên, khi sử dụng ALTER TABLE, hãy cẩn thận ...
Hãy xem xét tình huống sau:
- Đĩa đầy 60%.
- cơ sở dữ liệu chiếm 50%, các tệp khác chiếm 10%.
Nếu bạn thực hiện thay đổi alter table trên bất kỳ bảng nào, bạn sẽ hết dung lượng ổ đĩa nếu bạn có tất cả các bảng trong một tệp.
Nếu bạn có nó trong nhiều tệp, bạn sẽ không gặp vấn đề (ngoại trừ việc dùng quá liều caffeine trong tất cả thời gian chờ đợi).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thứ tự sql phức tạp của

  2. Cách thích hợp để lưu trữ dữ liệu này trong một lược đồ MySQL là gì?

  3. Tìm kiếm địa lý (Khoảng cách) trong PHP / MySQL (Hiệu suất)

  4. MySQL Đệ quy lấy tất cả con từ cha mẹ

  5. H2 - Lỗi khi truy cập bảng được liên kết với câu lệnh SQL SELECT * FROM null T