Nghiêm khắc chỉ có vấn đề RAM?


4

Tôi phải làm việc trong một dự án có một bảng lớn hơn với hàng tỷ bản ghi nhưng chỉ có hai trường là id và một trường khác là văn bản.

Và id sẽ được đặt thành BIGINT và PK sau đó nếu 8 + 2 (thêm 2 byte cho phí) mỗi byte được lấy để lập chỉ mục thì trong tính toán của tôi, RAM 64GB sẽ đủ để chứa ít nhất 5 tỷ chỉ mục bản ghi.

Nhưng nó chỉ là một yếu tố tôi đang xem xét.

Bạn có nghĩ rằng có những yếu tố khác mà tôi nên xem xét?

Và kích thước RAM cũng có thể được tăng lên nếu cần. Và bảng đó sẽ là bảng bận rộn nhất với ít lần ghi và nhiều lần đọc.

+1

Tôi có thể hỏi thêm một chút thông tin về dự án này không?Bảng này có nghĩa là gì được sử dụng để làm gì?Vấn đề gì bạn đang cố gắng giải quyết? 15 sep. 112011-09-15 07:14:14

3

Bạn cần xem xét công cụ lưu trữ mà bạn sẽ sử dụng cho dự án của mình vì MySQL lưu trữ khác nhau cho mỗi công cụ lưu trữ.

MyISAM chỉ lưu trữ các trang chỉ mục.InnoDB lưu trữ dữ liệu và các trang chỉ mục.

Cho rằng bạn có một bảng có id lớn, tôi hy vọng bạn đang sử dụng MyISAM.

Đây là một truy vấn để giúp bạn xác định key_buffer_size tốt nhất:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Điều này sẽ cung cấp Cài đặt được đề xuất cho Bộ nhớ cache khóa MyISAM (key_buffer_size) được cung cấp cho tập dữ liệu hiện tại của bạn (the query will cap the recommendation at 4G (4096M). Đối với the query will cap the recommendation at 4G (4096M). 32 bit, 4GB là giới hạn. Đối với 64 bit, 8GB.

CẬP NHẬT 2011-09-16 14:49 EDT

Nếu bạn đang sử dụng InnoDB, việc định cỡ key_buffer_size sẽ không giúp ích gì.InnoDB and MyISAM cache differently .

Đây là loại truy vấn tương tự để định kích thước Bộ đệm InnoDB của bạn:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
  0

Thật thú vị, tôi đang nghĩ đến việc sử dụng InnoDB vì nó hoạt động tốt hơn khi tải.Vì vậy, những gì tôi học được từ câu trả lời của bạn là miễn là có đủ bộ đệm chính.Kích thước DB không quan trọng? 16 sep. 112011-09-16 16:56:43

  0

Tôi đã cập nhật câu trả lời của mình cho địa chỉ bằng InnoDB 16 sep. 112011-09-16 18:49:40

  0

Nhưng như bạn đã đề cập rằng giới hạn tối đa là 8GB cho MyISAM thì điều đó có nghĩa là ngoài tài nguyên RAM sẽ không được sử dụng hiệu quả?{Xin lỗi vì đã hỏi câu hỏi này quá muộn ..} 01 oct. 112011-10-01 22:14:09

+1

@Gary: Bạn nói đúng.Bộ nhớ được phân bổ trên 8GB cho key_buffer_size bị lãng phí.Điều này rất quan trọng vì chỉ các trang chỉ mục được lưu trong bộ nhớ cache cho MyISAM.Bạn có thể tạo bộ đệm chính dành riêng cho các bảng MyISAM cụ thể: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 oct. 112011-10-01 22:41:42