MySQL - Pertanyaan mudah kadangkala mengalami gelung tak terhingga dan peningkatan bilangan rows_fetched
P粉022140576
P粉022140576 2023-09-08 09:20:56
0
1
635

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.

P粉022140576
P粉022140576

membalas semua(1)
P粉645569197

Letak di hujung PK:

PRIMARY KEY key_rule_id (rule_id, key, value),
KEY (key, value, rule_id)

Sila ambil perhatian bahawa perkara yang sama berlaku untuk 322 来自 2+4*80,这意味着它仅使用一列。 (const. )

  • medan panjang 2 bait
  • Maksimum 4 bait setiap aksara utf8mb4
  • 80 aksara dalam pernyataan

Ini tidak bermakna bahawa 322 bait penuh diperuntukkan, tetapi ia adalah "senario kes terburuk".

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan