2010-03-21 11 views
7

Tôi có cơ sở dữ liệu MySQL innodb ở mức 1,9 GB, được hiển thị bằng lệnh sau.Tải một cơ sở dữ liệu innodb của MySQL vào bộ nhớ

SELECT table_schema "Data Base Name" 
    , sum(data_length + index_length)/1 048 576 
     as "Data Base Size in MB" 
    , sum(data_free)/ 1 048 576 
     as "Free Space in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+ 
| Data Base Name  | Data Base Size in MB | Free Space in MB | 
+--------------------+----------------------+------------------+ 
| database_name  |  1959.73437500 | 31080.00000000 | 

Câu hỏi của tôi là:

  1. Liệu nó có nghĩa là nếu tôi đặt innodb_buffer_pool_size tới 2GB hoặc lớn hơn, toàn bộ cơ sở dữ liệu có thể được nạp vào bộ nhớ để ít nhiều đọc từ yêu cầu đĩa là cần thiết?

  2. Dung lượng trống 31GB có nghĩa là gì?

  3. Nếu RAM tối đa có thể được cấp cho innodb_buffer_pool_size là 1GB, có thể chỉ định bảng nào được nạp vào bộ nhớ trong khi vẫn giữ cho người khác luôn đọc từ đĩa không?

Xin cảm ơn trước.

Trả lời

7
  1. Không chính xác. InnoDB vùng đệm được sử dụng để đệm đọc và viết. nếu hầu hết quyền truy cập của bạn được đọc, hầu hết nếu nó sẽ được lưu vào bộ nhớ cache và sẽ cần ít quyền truy cập đĩa hơn.
  2. có thể là bug, tài liệu này không được ghi rõ lắm nhưng tôi nghĩ data_free là không gian sẵn có bên trong tệp innodb (nếu bạn viết nhiều hơn InnoDB này sẽ phải mở rộng tệp dữ liệu).
  3. không, nhưng InnoDB sẽ lưu trữ dữ liệu mà bạn truy cập tự động nhất, do đó, nó sẽ có hiệu quả tối ưu.

xem xét sử dụng lớp cache để loại bỏ hoàn toàn truy cập cơ sở dữ liệu nếu bạn cần hiệu suất tốt hơn.

2
  1. Bạn nên lo lắng về việc có đủ bộ nhớ để lưu các chỉ mục trong ram và để dữ liệu trên đĩa. Hiệu suất cơ sở dữ liệu bị rất nhiều nếu các chỉ mục phải được đọc từ đĩa mỗi lần - nhiều hơn so với phí trên của việc lấy dữ liệu mong muốn từ đĩa.
  2. Tệp dữ liệu InnoDB được tạo ở kích thước cố định, với tùy chọn để tự động thêm chúng (tạo thêm tệp) nếu chúng đầy. Bạn có thể xem kích thước mỗi tệp là với show variables like 'innodb_data_file_path'. Không gian trống được báo cáo là số lượng tệp dữ liệu hiện tại không được sử dụng. Trong trường hợp của bạn, bạn đã có 2gigs dữ liệu được lưu trữ (rất có thể) 32gigs của các tệp dữ liệu InnodB, để lại 30gig.
  3. Có lý do nào bạn muốn bỏ qua logic đệm ẩn của riêng InnoDB để ghim các bảng cụ thể trong ram không? Bộ nhớ cache sẽ tự nhiên có xu hướng giữ dữ liệu được truy cập thường xuyên nhất trong ram, và hiệu suất sẽ không nghi ngờ gì nếu bạn buộc nó giữ dữ liệu ít được sử dụng thay vì phổ biến nhất.