簡體   English   中英

MariaDB 和 MySQL 在 Windows 10 上非常慢

[英]MariaDB & MySQL very slow on Windows 10

我在 Windows 10 (i5,ssd) 機器上使用 WAMP 並注意到網站速度很慢。 比我的舊 Windows 7 (i3,hd) PC 慢得多。

當我用計算循環一個簡單的腳本時: Win10: 0.4 sec Win7: 9.5 sec

但是當我在循環中添加數據庫查詢時,情況正好相反: Win10: 147 sec Win7: 15 sec

我使用的腳本在表“test”中插入一個簡單的哈希:

CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `testvalue` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

PHP 測試腳本:

<?php

set_time_limit(0);
$time_start = microtime(true);

$insertTotal = 100000;

$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "speedtest";
$db = new mysqli($servername, $username, $password, $dbname);

$db->query("TRUNCATE test");

for($i=0;$i<$insertTotal;$i++)
{
    $db->query("INSERT INTO test VALUES(null,'".md5(time().rand(0,999999999))."')");
}

$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo 'Total exec time: '.$execution_time.' sec.';

有很多關於這個的話題,所以我將總結我已經做過的所有事情:

  1. 將服務器名從 localhost 更改為 127.0.0.1
  2. Apache:禁用 CGI
  3. PHP:禁用 Xdebug
  4. 禁用防火牆
  5. 禁用病毒掃描程序
  6. 不同硬盤上的數據目錄

在 my.ini 中提出了很多緩沖區:

key_buffer_size = 512M
max_allowed_packet = 64M
table_open_cache = 256
sort_buffer_size = 4M
net_buffer_length = 8K
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 128M

那么我在這里還缺少什么?

一些附加信息:執行腳本時,SSD 的負載為 0%,CPU 的負載約為 30%。

更新:

  • 重新安裝 Wamp 3.2.3。 使用 MySql 5.7.31、8.0.21 和 MariaDB 10.4.10、10.4.13、10.5.5 對其進行了測試。 這里和那里有幾秒鍾的差異,但仍然很慢。
  • 另外我將腳本更改為使用 $db->multi_query($sql) 看看這是否有效。 插入 10.000 行的結果在舊計算機上為 0.13 秒,在新計算機上為 8.5 秒。
  • 只是為了確保它不是 SSD 或我這次只使用 SQlite3 編寫了相同的測試腳本並在短短 7 秒內插入了 1.000.000 行,所以它只是 MySQL 和 MariaDB。
  • 在帶有 Wamp 2.5 的新 PC 上安裝了 VMWare windows 7。 有趣的是,執行時間差不多,也很慢。
  • 從 MyISAM 遷移到 InnoDB
  • 在單個INSERT批處理 100 行; 它的運行速度大約是原來的 10 倍。
  • 根據備用 RAM 的數量和您使用的引擎,應該進行一些調整。
  • 永遠不應該使用多查詢。
  • autocommit與 MyISAM 無關。
  • 單個事務中的 100K INSERTs有其他問題。 要么做上面的批處理,要么只在一個事務中插入 100 個插入。 (在任何一種情況下超過 100 都是“收益遞減”。)

#update#我的電腦確實有問題。 我最后修復了它( https://superuser.com/questions/1584203/windows-10-very-slow-how-to-find-the-cause ),現在測試腳本的運行速度提高了 34 倍。 因此,使用多值插入的更好的腳本也更快。 現在整個 WAMP 的運行速度要快很多倍。 很高興這已解決。 #更新#

在這個問題上花了很多時間之后,我繼續研究我的實際導入腳本,突然意識到我一直在錯誤的樹上咆哮。 我一直在嘗試解決一個實際上不是問題的問題。

當然,這是不正確的,當舊 PC 可以執行 50.000 左右時,我的寫入速度為每秒 500 個單獨查詢,但畢竟我永遠不應該使用單獨查詢。 我如此專注於這個問題,以至於我沒有意識到性能問題並沒有影響 MySQL 和 MariaDB 可以做的所有其他事情。

所以里克詹姆斯的回答實際上是正確的想法。

對不起,浪費你的時間。 感謝你們對我的幫助! 我以前一直在處理問題並解決它們,但從來沒有處理過一個根本不是真正問題的問題!

舉個例子,我稍微修改了測試腳本。 這可以在大約 14 分鍾內插入 2 億行:

<?php

set_time_limit(0);
$time_start = microtime(true);

$insertTotal = 200000000;

$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname = "speedtest";
$db = new mysqli($servername, $username, $password, $dbname);

$db->query("TRUNCATE test");

$counter = 0;
$sql = array();
for($i=0;$i<$insertTotal;$i++)
{
    $sql[] = "(null,'".md5(time().rand(0,999999999))."')";
    if($counter == 5000)
    {
        $sql = implode(",",$sql);
        $db->query("INSERT INTO test VALUES ".$sql.";");
        $counter = 0;
        $sql = array();
    }
    $counter++;
}
$sql = implode(",",$sql);
$db->query("INSERT INTO test VALUES ".$sql.";");    

$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo 'Total exec time: '.$execution_time.' sec.';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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