[英]Very slow innodb operations
我有用於將URL與我們的數據庫URL進行比較並僅保存新URL的php腳本。 問題在於此腳本的每個步驟都花費很長時間(總計約10分鍾以上)。 步驟如下:
$query = sprintf("DELETE FROM %s ; ", $DB ['compare_result_table']);
$query = sprintf("LOAD DATA INFILE '%s' IGNORE INTO TABLE %s
FIELDS TERMINATED BY ','
ENCLOSED BY \"'\"
LINES TERMINATED BY '\n'
(domain, url_value)",
$real_out_path, $DB["compare_result_table"]);
$query = sprintf(" INSERT INTO %s SELECT domain
FROM %s ;", $DB ['compare_url_table'], 'domain_data' );
$query = sprintf("DELETE a.*
FROM %s a INNER JOIN %s b using (domain);",
$DB["compare_result_table"], $DB ['compare_url_table']);
這是表格說明:
DROP TABLE IF EXISTS cmp_url;
CREATE TABLE cmp_url
(
domain varchar(255),
index (domain)
);
DROP TABLE IF EXISTS cmp_result;
CREATE TABLE cmp_result
(
domain varchar(255),
url_value varchar(4096),
index (domain)
);
每次我呼叫show PROCESSLIST時,我都會看到每個步驟(不包括從文件中加載數據)都花費了很長時間。 現在,包含要比較的域的domain_data表為600 000條記錄。 它變得越大,所有步驟就越慢。
這是我在my.cnf中更改的一些選項:
innodb_lock_wait_timeout = 360
innodb_autoinc_lock_mode=2
binlog_format=mixed
transaction-isolation = READ-COMMITTED
但這並沒有改變任何東西。 我該如何解決這個問題? 感謝您的時間。
要完全替換表:
CREATE TABLE new LIKE real;
LOAD (or whatever) into new.
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
快速。 零停機時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.