簡體   English   中英

innodb操作非常慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM