Saya telah cuba mencari tahu sejak 4 minggu yang lalu mengapa pertanyaan dijalankan secara berselang selama-lamanya pada Docker Mysql Percona Distribution (percona:8.0.32-24, kosongkan my.cnf). Pertanyaan posskrip ini dijalankan selepas mengimport berbilang CSV yang dijana menggunakan algoritma perlombongan data MySQL Shell. Separuh masa, ia berjaya dilaksanakan dalam 2-3 saat.
Jika tidak, walaupun nombor rows_inserted yang betul ditunjukkan, ia berhenti dan masuk ke gelung tak terhingga (2+ hari) dan terus meningkatkan nombor rows_fetched (rajah1.png) . Mengapakah pertanyaan ini mengambil masa yang lama untuk dijalankan dan untuk apa ia membaca jadual tanpa henti (baris_diambil tinggi)?
CREATE TABLE algo_rca_rule_metric ( key varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, rule_id int unsigned NOT NULL, context_id int unsigned NOT NULL, value double NOT NULL, PRIMARY KEY (key,value,rule_id), KEY key_rule_id (rule_id,key,value) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
** Masukkan 2 metrik (keyakinan dan sokongan) sebelum pertanyaan dijalankan:
INSERT INTO algo_rca_rule_metric SELECT 'confidence_order' AS 'key', metric_confidence.rule_id, metric_confidence.context_id, row_number() over (ORDER BY metric_confidence.value ASC, metric_support.value ASC) AS 'value' FROM algo_rca_rule_metric metric_confidence LEFT JOIN algo_rca_rule_metric metric_support ON (metric_confidence.rule_id = metric_support.rule_id AND metric_support.key = 'rule_support') WHERE metric_confidence.key = 'confidence';
Tingkah laku yang sama diperhatikan tanpa INSERT.
Lihat pernyataan penjelasan (rajah3.png). Apabila gelung tak terhingga berlaku, perkara berikut diperhatikan:
显示进程列表
:查询被标记为status =“执行”
.
显示引擎innodb状态
: Pertanyaan tidak ditemui dalam bahagian transaksi.
select * from sys.schema_table_statistics WHERE table_schema = 'DB_NAME'
output rows_fetched nampaknya berkembang tidak terhingga. (lihat fig1.png tidak berfungsi, fig4.png berfungsi, kedua-duanya dilakukan pada data yang sama).
Sebarang bantuan atau pandangan boleh menyelamatkan nyawa.
Letak
值
di hujung PK:Sila ambil perhatian bahawa perkara yang sama berlaku untuk
322
来自 2+4*80,这意味着它仅使用一列。 (const
. )Ini tidak bermakna bahawa 322 bait penuh diperuntukkan, tetapi ia adalah "senario kes terburuk".