Genelde MyISAM tablolarınız varsa, toplu ekleme arabelleğini arttırmalısınız . İşte MySQL Belgeleri bulk_insert_buffer_size ayarında ne diyor :
MyISAM, INSERT ... SELECT, INSERT ... DEĞERLER (...), (...), ... ve LOAD DATA INFILE için toplu eklemeleri daha hızlı yapmak için ağaç benzeri özel bir önbellek kullanır tablolar. Bu değişken, önbellek ağacının boyutunu, iş parçacığı başına bayt cinsinden sınırlar. 0'a ayarlamak bu optimizasyonu devre dışı bırakır. Varsayılan değer 8 MB'dir.
Yapmanız gereken iki şey var.
1) /etc/my.cnf dosyasına ekleyin.
[mysqld]
bulk_insert_buffer_size=512M
2) Bunun için global değeri ayarlayın
SET GLOBAL bulk_insert_buffer_size = 1024 * 1024 * 512;
Genel olarak bulk_insert_buffer_size öğesini ayarlama izniniz yoksa, bunu yapın
service mysql restart
Tabii ki, bu InnoDB için değil.
Başka bir açıdan, tabloların InnoDB veya MyISAM olup olmadığı, dizinler tablodan daha büyükse, çok fazla dizininiz olabilir. Genelde, bir MyISAM mysqldump dosyasının yeniden yüklenmesinin, mysqldump'in yaptığı süre boyunca 3 kez sürmesi gerektiğini düşünüyorum. Ayrıca, bir InnoDB mysqldump'ın yeniden yüklenmesinin, mysqldump'in yaptığı süre boyunca 4 kez sürmesi gerektiğini düşünüyorum.
Bir mysqldump'ı yeniden yüklemek için 4: 1 oranını aşıyorsanız, kesinlikle iki problemden birine sahipsiniz:
- çok fazla dizin var
- büyük sütunlar nedeniyle dizinler çok büyük
Verilerinizin boyutunu bu şekilde depolama motoruyla ölçebilirsiniz:
SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
Dizinlerin neredeyse veri kadar büyük veya daha büyük olup olmadığına bakın
İkili günlük kaydını bu şekilde devre dışı bırakmayı da düşünebilirsiniz:
echo "SET SQL_LOG_BIN=0;" > footable.sql
mysqldump --databases foo >> footable.sql
komut dosyasını yeniden yüklemeden önce