|  | 
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Привет.
Не могу найти объяснение такому долгому выполнению выполнению запроса, 1.5 сек.
И так себя ведут все таблицы, практически, и при update, и при insert.
В среднем 1 секунда и больше - запрос.
Из файла slow_query.log:
# Thread_id: 10379  Schema: exchanges  QC_hit: No
# Query_time: 1.534451  Lock_time: 0.000103  Rows_sent: 0  Rows_examined: 35
# Rows_affected: 1
SET timestamp=1528628365;
UPDATE `courses_from_glases` SET btce_ask = null, cex_bid = null, cex_ask = null, bittrex_bid = null, bittrex_ask = null, kraken_bid = null, kraken_ask = null, bitfinex_bid = null, bitfinex_ask = null, quoine_bid = null, quoine_ask = null, btcc_bid = null, btcc_ask = null, bitstamp_bid = null, bitstamp_ask = null, exmo_bid = null, exmo_ask = null, okcoin_bid = null, okcoin_ask = null, gdax_bid = null, gdax_ask = null, hitbtc_bid = null, hitbtc_ask = null, poloniex_bid = null, poloniex_ask = null, livecoin_bid = null, livecoin_ask = null, therocktrading_bid = null, therocktrading_ask = null, lakebtc_bid = null, lakebtc_ask = null, itbit_bid = null, itbit_ask = null, gemini_bid = null, gemini_ask = null, huobi_bid = null, huobi_ask = null, quadrigacx_bid = null, quadrigacx_ask = null, bleutrade_bid = null, bleutrade_ask = null, liqui_bid = null, liqui_ask = null, c_cex_bid = null, c_cex_ask = null, ecoin_bid = null, ecoin_ask = null, yobit_bid = null, yobit_ask = null, bter_bid = null, bter_ask = null WHERE pair = 'btc_usd';
в таблице неизменно 35 строк, можно добавить UNIQUE INDEX на колонку pair, но при таком количестве строк, по моему производительность не повысит.
CREATE TABLE `courses_from_glases` (
 `id` int(2) NOT NULL AUTO_INCREMENT,
 `pair` text,
 `btce_bid` float(20,8) DEFAULT NULL,
 `btce_ask` float(20,8) DEFAULT NULL,
 `cex_bid` float(20,8) DEFAULT NULL,
 `cex_ask` float(20,8) DEFAULT NULL,
 `bittrex_bid` float(20,8) DEFAULT NULL,
 `bittrex_ask` float(20,8) DEFAULT NULL,
 `kraken_bid` float(20,8) DEFAULT NULL,
 `kraken_ask` float(20,8) DEFAULT NULL,
 `bitfinex_bid` float(20,8) DEFAULT NULL,
 `bitfinex_ask` float(20,8) DEFAULT NULL,
 `quoine_bid` float(20,8) DEFAULT NULL,
 `quoine_ask` float(20,8) DEFAULT NULL,
 `btcc_bid` float(20,8) DEFAULT NULL,
 `btcc_ask` float(20,8) DEFAULT NULL,
 `bitstamp_bid` float(20,8) DEFAULT NULL,
 `bitstamp_ask` float(20,8) DEFAULT NULL,
 `exmo_bid` float(20,8) DEFAULT NULL,
 `exmo_ask` float(20,8) DEFAULT NULL,
 `okcoin_bid` float(20,8) DEFAULT NULL,
 `okcoin_ask` float(20,8) DEFAULT NULL,
 `gdax_bid` float(20,8) DEFAULT NULL,
 `gdax_ask` float(20,8) DEFAULT NULL,
 `hitbtc_bid` float(20,8) DEFAULT NULL,
 `hitbtc_ask` float(20,8) DEFAULT NULL,
 `poloniex_bid` float(20,8) DEFAULT NULL,
 `poloniex_ask` float(20,8) DEFAULT NULL,
 `livecoin_bid` float(20,8) DEFAULT NULL,
 `livecoin_ask` float(20,8) DEFAULT NULL,
 `therocktrading_bid` float(20,8) DEFAULT NULL,
 `therocktrading_ask` float(20,8) DEFAULT NULL,
 `lakebtc_bid` float(20,8) DEFAULT NULL,
 `lakebtc_ask` float(20,8) DEFAULT NULL,
 `itbit_bid` float(20,8) DEFAULT NULL,
 `itbit_ask` float(20,8) DEFAULT NULL,
 `gemini_bid` float(20,8) DEFAULT NULL,
 `gemini_ask` float(20,8) DEFAULT NULL,
 `huobi_bid` float(20,8) DEFAULT NULL,
 `huobi_ask` float(20,8) DEFAULT NULL,
 `quadrigacx_bid` float(20,8) DEFAULT NULL,
 `quadrigacx_ask` float(20,8) DEFAULT NULL,
 `bleutrade_bid` float(20,8) DEFAULT NULL,
 `bleutrade_ask` float(20,8) DEFAULT NULL,
 `liqui_bid` float(20,8) DEFAULT NULL,
 `liqui_ask` float(20,8) DEFAULT NULL,
 `c_cex_bid` float(20,8) DEFAULT NULL,
 `c_cex_ask` float(20,8) DEFAULT NULL,
 `ecoin_bid` float(20,8) DEFAULT NULL,
 `ecoin_ask` float(20,8) DEFAULT NULL,
 `yobit_bid` float(20,8) DEFAULT NULL,
 `yobit_ask` float(20,8) DEFAULT NULL,
 `bter_bid` float(20,8) DEFAULT NULL,
 `bter_ask` float(20,8) DEFAULT NULL,
 `binance_bid` float(15,8) DEFAULT NULL,
 `binance_ask` float(15,8) DEFAULT NULL,
 `date_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8
пробовал выполнить похожий запрос в таком цикле
for ($a = 0; $a < 100000; $a++) {
    $stringMysql = "UPDATE result_for_trading_only_selected_birges SET ct = $a, `amount`= $a,`birge_buy`=null , btce_profit_percent = $totaltime,
        cex_profit_percent = null, bittrex_profit_percent = null, kraken_profit_percent = null, bitfinex_profit_percent = null, quoine_profit_percent = null,
        btcc_profit_percent = null, bitstamp_profit_percent = null, exmo_profit_percent = null, okcoin_profit_percent = null, gdax_profit_percent = null,
        hitbtc_profit_percent = null, poloniex_profit_percent = null, livecoin_profit_percent = null, therocktrading_profit_percent = null,
        lakebtc_profit_percent = null, itbit_profit_percent = null, gemini_profit_percent = null, huobi_profit_percent = null, quadrigacx_profit_percent = null,
        bleutrade_profit_percent = null, liqui_profit_percent = null, c_cex_profit_percent = null, ecoin_profit_percent = null, yobit_profit_percent = null,
        bter_profit_percent = null, binance_profit_percent = null WHERE pair = '$pair';";
    try {
        if (! $mysqli->query($stringMysql)) {
            echo $mysqli->error . "<br>" . $stringMysql . "<br>";
        }
    } catch (Exception $ex) {
        echo "ошибка, " . $ex->getMessage();
    }
}
время выполнения 0.1 - 0.2 секунды, но это тоже очень много
никаких ошибок, кроме того, что база падает, если запустить сбор котировок со всех бирж, опять таки, причину падения не пишет в лог, но с учетом того, что комп отдельная машина,
processor  Intel(R) Xeon(R) CPU           X3440  @ 2.53GHz
memory     16GiB System Memory
и полностью исчезает память, причина только в mysql.
А вот в чем дело, не могу понять, есть мысли?
Спасибо.
Неактивен

что показывает профилирование запроса? на что тратится время?
Неактивен
Что то не то делаю
set profiling=1;
MariaDB [exchanges]> show profiles;
+----------+------------+-------------------+
| Query_ID | Duration   | Query             |
+----------+------------+-------------------+
|        1 | 0.00020477 | SELECT DATABASE() |
|        2 | 0.30240185 | show databases    |
|        3 | 0.00041044 | show tables       |
|        4 | 0.00015141 | set profiling=1   |
|        5 | 0.00820053 | show variables    |
+----------+------------+-------------------+
по идее должно быть много запросов, а показываются только команды набранные в консоли.
Неактивен
Если запрос выполнить в консоли 
MariaDB [exchanges]> UPDATE `courses_from_glases` SET btce_ask = null, cex_bid = null, cex_ask = null, bittrex_bid = null, bittrex_ask = null, kraken_bid = null, kraken_ask = null, bitfinex_bid = null, bitfinex_ask = null, quoine_bid = null, quoine_ask = null, btcc_bid = null, btcc_ask = null, bitstamp_bid = null, bitstamp_ask = null, exmo_bid = null, exmo_ask = null, okcoin_bid = null, okcoin_ask = null, gdax_bid = null, gdax_ask = null, hitbtc_bid = null, hitbtc_ask = null, poloniex_bid = null, poloniex_ask = null, livecoin_bid = null, livecoin_ask = null, therocktrading_bid = null, therocktrading_ask = null, lakebtc_bid = null, lakebtc_ask = null, itbit_bid = null, itbit_ask = null, gemini_bid = null, gemini_ask = null, huobi_bid = null, huobi_ask = null, quadrigacx_bid = null, quadrigacx_ask = null, bleutrade_bid = null, bleutrade_ask = null, liqui_bid = null, liqui_ask = null, c_cex_bid = null, c_cex_ask = null, ecoin_bid = null, ecoin_ask = null, yobit_bid = null, yobit_ask = null, bter_bid = null, bter_ask = null WHERE pair = 'usd_btc'
    -> ;
Query OK, 1 row affected (0.45 sec)
Rows matched: 1  Changed: 1  Warnings: 0
MariaDB [exchanges]> show profiles;
+----------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                                                                                                                                                                                                                                                        |
+----------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|        1 | 0.00020477 | SELECT DATABASE()                                                                                                                                                                                                                                                                                            |
|        2 | 0.30240185 | show databases                                                                                                                                                                                                                                                                                               |
|        3 | 0.00041044 | show tables                                                                                                                                                                                                                                                                                                  |
|        4 | 0.00015141 | set profiling=1                                                                                                                                                                                                                                                                                              |
|        5 | 0.00820053 | show variables                                                                                                                                                                                                                                                                                               |
|        6 | 0.00011058 | set profiling=1                                                                                                                                                                                                                                                                                              |
|        7 | 0.44357887 | UPDATE `courses_from_glases` SET btce_ask = null, cex_bid = null, cex_ask = null, bittrex_bid = null, bittrex_ask = null, kraken_bid = null, kraken_ask = null, bitfinex_bid = null, bitfinex_ask = null, quoine_bid = null, quoine_ask = null, btcc_bid = null, btcc_ask = null, bitstamp_bid = null, bitst |
+----------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
7 rows in set (0.00 sec)
MariaDB [exchanges]> show profile for query 7;
+------------------------------+----------+
| Status                       | Duration |
+------------------------------+----------+
| starting                     | 0.000087 |
| checking permissions         | 0.000007 |
| Opening tables               | 0.000014 |
| After opening tables         | 0.000007 |
| System lock                  | 0.000005 |
| Table lock                   | 0.000004 |
| init                         | 0.000127 |
| updating                     | 0.084908 |
| end                          | 0.000015 |
| Waiting for query cache lock | 0.000025 |
| end                          | 0.000017 |
| query end                    | 0.358251 |
| closing tables               | 0.000023 |
| Unlocking tables             | 0.000026 |
| freeing items                | 0.000019 |
| updating status              | 0.000036 |
| cleaning up                  | 0.000005 |
+------------------------------+----------+
17 rows in set (0.00 sec)
получается что | query end                    | 0.358251 |
самое длинное
я пробовал для таких процессов - query end
их очень много висит в ответе на запрос show processlist
написать событие 
BEGIN 
 select @q:=CONCAT('KILL ',ID, ';')  
 FROM information_schema.processlist where State = 'query end' or 
 Command = 'Sleep'; 
 PREPARE stmt FROM @q; 
 EXECUTE stmt; 
 DEALLOCATE PREPARE stmt; 
END
после нескольких минут работы база рухнула так, что восстанавливать пришлось из бэкапов
Неактивен

Неактивен
Такой код в скрипте, в котором 3 запроса, выполняющихся больше 1 секунды:
$allMethods->writeToDB("SET profiling = 1;", $mysqli, "SET profiling = 1;");
код
$res = '';
$array = $mysqli->query("show profiles;");
$a = 1;
while ($array_2 = mysqli_fetch_assoc($array)) {
    $res .= serialize($array_2) . "\r\n";
    $res .= "show profile for query $a;" . "\r\n";
    $array_3 = mysqli_fetch_assoc($mysqli->query("show profile for query $a;"));
    $res .= serialize($array_3) . "\r\n";
    $a++;
}
$allMethods->writeToLogDebagInfo($res, "serialize(array)");
выдает странный результат
a:3:{s:8:"Query_ID";s:1:"1";s:8:"Duration";s:10:"0.00008751";s:5:"Query";s:82:"SELECT birga AS name, allow_disallow FROM trade_management where birga is not null";}
show profile for query 1;
a:2:{s:6:"Status";s:8:"starting";s:8:"Duration";s:8:"0.000022";}
Duration в обоих строках должно быть одинаковое, а время не совпадает, (так же и для остальных запросов).
Есть соображения?
Неактивен

каковы значения query cache, innodb_file_per_table, innodb_flush_log_at_trx_commit, sync_binlog ?
Неактивен
query_cache_limit       = 1M
query_cache_size        = 16M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
sync_binlog - в конфиге не прописан, значит дефолтное значение
Неактивен

Неактивен
добавил в конфиг
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M
ничего не изменилось
из лога медленных запросов
если нагрузку увеличить примерно на 20%, здесь уже не секунда, а минута
# Thread_id: 6800  Schema: exchanges  QC_hit: No
# Query_time: 57.966748  Lock_time: 55.195027  Rows_sent: 0  Rows_examined: 0
# Rows_affected: 0
SET timestamp=1528702564;
UPDATE result_for_trading_only_selected_birges SET `amount`= null,`birge_buy`=null , birge_buy = null, btce_profit_percent = null, cex_profit_percent = null, bittrex_profit_percent = null, kraken_profit_percent = null, bitfinex_profit_percent = null, quoine_profit_percent = null, btcc_profit_percent = null, bitstamp_profit_percent = null, exmo_profit_percent = null, okcoin_profit_percent = null, gdax_profit_percent = null, hitbtc_profit_percent = null, poloniex_profit_percent = null, livecoin_profit_percent = null, therocktrading_profit_percent = null, lakebtc_profit_percent = null, itbit_profit_percent = null, gemini_profit_percent = null, huobi_profit_percent = null, quadrigacx_profit_percent = null, bleutrade_profit_percent = null, liqui_profit_percent = null, c_cex_profit_percent = null, ecoin_profit_percent = null, yobit_profit_percent = null, bter_profit_percent = null, binance_profit_percent = null , `timestamp`=UNIX_TIMESTAMP(now()), `datetime`=now(), `time_execute`=0.36343383789062 WHERE pair = 'btc_usd';
Неактивен
show variables; 
https://www.sendspace.com/file/1igjoy
show global status; 
https://www.sendspace.com/file/cg36ev
select version(); 
10.1.26-MariaDB-0+deb9u1
Неактивен
конфиг
50-server.cnf
https://www.sendspace.com/file/q49djq
Неактивен
Страниц: 1