MYSQL error : #3699 - Timeout exceeded in regular expression match
MYSQL error : #3699 - Timeout exceeded in regular expression match
运行 使用 REGEX 的 MYSQL 查询,出现超时错误。
我在 AWS 上有一个 Bitnami NGINX Wordpress 堆栈 Ubuntu 16.
使用 MYSQL 8.0.16
我需要更改 MYSQL(或其他任何地方)中的哪些设置才能阻止此错误?
感谢帮助..
尝试使用 my.cnf 文件并重新启动 MYSQL 但我不知道哪个超时设置,似乎有几个
这是 SQL 查询
REPLACE INTO wp_term_relationships (term_taxonomy_id, object_id) SELECT '272', ID
FROM `wp_posts`
WHERE (
post_title REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
OR post_content REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
)
AND post_type = 'post'
#3699 - Timeout exceeded in regular expression match.
*update - 不确定如何将图片添加到评论中,所以会在这里添加。
可变设置,为@Rick James 如何列出它们干杯
enter image description here
你应该把正则表达式变成一个特里。
这对引擎来说工作更少,它最多只需要执行 16 步就失败了
而不是它现在正在执行的当前 110 个步骤。
尝试
A(?:achen|ugsburg)|B(?:a(?:den-Württemberg|varia|yern)|er(?:gisch[ ]Gladbach|lin)|ielefeld|o(?:chum|nn|ttrop)|r(?:a(?:ndenbur|unschwei)g|eme(?:rhave)?n))|C(?:hemnitz|ologne)|D(?:armstadt|eutsch|ortmund|resden|uisburg|üsseldorf)|E(?:r(?:furt|langen)|ssen)|F(?:r(?:ankfurt|eiburg)|ürth)|G(?:e(?:lsenkirche|rma)n|öttingen)|H(?:a(?:gen|lle|m(?:burg|m)|n(?:n)?over)|e(?:i(?:delberg|lbronn)|rne|ssen?)|ildesheim)|Ingolstadt|Jena|K(?:a(?:rlsruhe|ssel)|iel|oblenz|refeld|öln)|L(?:e(?:ipzig|verkusen)|ower[ ]Saxony|udwigshafen|übeck)|M(?:a(?:gdeburg|inz|nnheim)|ecklenburg-Vorpommern|oers|unich|önchengladbach|ü(?:lheim|n(?:chen|ster)))|N(?:euss|iedersachsen|or(?:drhein-Westfalen|th[ ]Rhine-)|uremberg|ürnberg)|O(?:berhausen|ffenbach|ldenburg|snabrück)|P(?:aderborn|forzheim|otsdam)|R(?:e(?:cklinghausen|gensburg|mscheid|utlingen)|h(?:einland-Pfalz|ineland-Palatinate)|ostock)|S(?:a(?:a(?:le|r(?:brücken|land))|chsen(?:-Anhalt)?|lzgitter|xony(?:-Anhalt)?)|chleswig-Holstein|iegen|olingen|tuttgart)|T(?:h(?:uringia|üringen)|rier)|Ulm|W(?:estphalia|iesbaden|olfsburg|uppertal|ürzburg)
如果您的引擎不支持 non-capture 语法,请将 (?:
更改为 (
。
另外,如果你想在压缩的
上,你可以将 [ ]
更改为 space
正则表达式。
https://regex101.com/r/iEzw33/1
展开
A
(?: achen | ugsburg )
| B
(?:
a
(?: den-Württemberg | varia | yern )
| er
(?: gisch [ ] Gladbach | lin )
| ielefeld
| o
(?: chum | nn | ttrop )
| r
(?:
a
(?: ndenbur | unschwei )
g
| eme
(?: rhave )?
n
)
)
| C
(?: hemnitz | ologne )
| D
(?:
armstadt
| eutsch
| ortmund
| resden
| uisburg
| üsseldorf
)
| E
(?:
r
(?: furt | langen )
| ssen
)
| F
(?:
r
(?: ankfurt | eiburg )
| ürth
)
| G
(?:
e
(?: lsenkirche | rma )
n
| öttingen
)
| H
(?:
a
(?:
gen
| lle
| m
(?: burg | m )
| n
(?: n )?
over
)
| e
(?:
i
(?: delberg | lbronn )
| rne
| ssen?
)
| ildesheim
)
| Ingolstadt
| Jena
| K
(?:
a
(?: rlsruhe | ssel )
| iel
| oblenz
| refeld
| öln
)
| L
(?:
e
(?: ipzig | verkusen )
| ower [ ] Saxony
| udwigshafen
| übeck
)
| M
(?:
a
(?: gdeburg | inz | nnheim )
| ecklenburg-Vorpommern
| oers
| unich
| önchengladbach
| ü
(?:
lheim
| n
(?: chen | ster )
)
)
| N
(?:
euss
| iedersachsen
| or
(?: drhein-Westfalen | th [ ] Rhine- )
| uremberg
| ürnberg
)
| O
(?:
berhausen
| ffenbach
| ldenburg
| snabrück
)
| P
(?: aderborn | forzheim | otsdam )
| R
(?:
e
(?:
cklinghausen
| gensburg
| mscheid
| utlingen
)
| h
(?: einland-Pfalz | ineland-Palatinate )
| ostock
)
| S
(?:
a
(?:
a
(?:
le
| r
(?: brücken | land )
)
| chsen
(?: -Anhalt )?
| lzgitter
| xony
(?: -Anhalt )?
)
| chleswig-Holstein
| iegen
| olingen
| tuttgart
)
| T
(?:
h
(?: uringia | üringen )
| rier
)
| Ulm
| W
(?:
estphalia
| iesbaden
| olfsburg
| uppertal
| ürzburg
)
让我们检查一下速度:
Regex1: A(?:achen|ugsburg)|B(?:a(?:den-Württemberg|varia|yern)|er(?:gisch[ ]Gladbach|lin)|ielefeld|o(?:chum|nn|ttrop)|r(?:a(?:ndenbur|unschwei)g|eme(?:rhave)?n))|C(?:hemnitz|ologne)|D(?:armstadt|eutsch|ortmund|resden|uisburg|üsseldorf)|E(?:r(?:furt|langen)|ssen)|F(?:r(?:ankfurt|eiburg)|ürth)|G(?:e(?:lsenkirche|rma)n|öttingen)|H(?:a(?:gen|lle|m(?:burg|m)|n(?:n)?over)|e(?:i(?:delberg|lbronn)|rne|ssen?)|ildesheim)|Ingolstadt|Jena|K(?:a(?:rlsruhe|ssel)|iel|oblenz|refeld|öln)|L(?:e(?:ipzig|verkusen)|ower[ ]Saxony|udwigshafen|übeck)|M(?:a(?:gdeburg|inz|nnheim)|ecklenburg-Vorpommern|oers|unich|önchengladbach|ü(?:lheim|n(?:chen|ster)))|N(?:euss|iedersachsen|or(?:drhein-Westfalen|th[ ]Rhine-)|uremberg|ürnberg)|O(?:berhausen|ffenbach|ldenburg|snabrück)|P(?:aderborn|forzheim|otsdam)|R(?:e(?:cklinghausen|gensburg|mscheid|utlingen)|h(?:einland-Pfalz|ineland-Palatinate)|ostock)|S(?:a(?:a(?:le|r(?:brücken|land))|chsen(?:-Anhalt)?|lzgitter|xony(?:-Anhalt)?)|chleswig-Holstein|iegen|olingen|tuttgart)|T(?:h(?:uringia|üringen)|rier)|Ulm|W(?:estphalia|iesbaden|olfsburg|uppertal|ürzburg)
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 110
Elapsed Time: 5.74 s, 5736.58 ms, 5736578 µs
Matches per sec: 958,759
哇,每秒匹配一百万个单词!
"Timeout" 大概是由于对大型 table 的慢查询。因此,让我们解决查询速度问题。
REPLACE
是 DELETE
+ INSERT
.
REPLACE is slow due to the
DELETE. And it will lose
term_order` 如果您已经设置了它。
- 考虑改用
INSERT IGNORE
。
WHERE
子句,由于 OR
和 REGEXP
,需要扫描整个 table。 FULLTEXT
索引可以避免这种情况;见下文。
- 重构
REGEXP
不会有太大帮助;更改为 LIKE
可能会更慢;等等
- 如果超时确实在
REGEXP
引擎内部,那么您可能需要 运行 一次查询几个城市。
FULLTEXT
会大大提高速度。但是,如果您不想朝那个方向发展,下一个最好的办法是将 REPLACE
更改为 INSERT IGNORE
。
FULLTEXT
方法是:
ALTER TABLE wp_posts ADD FULLTEXT(post_title, post_content); -- one-time task
INSERT IGNORE INTO ... (...)
SELECT 272, ID
FROM wp_posts
WHERE MATCH(post_title, post_content)
AGAINST('German Deutsch Berlin Hamburg Munich München ...' IN BOOLEAN MODE)
(根据 MySQL 的版本和所使用的 ENGINE
的不同,重音处理可能存在问题。)
SET GLOBAL regexp_time_limit=1024;
(有关文档,请参阅 here)
运行 使用 REGEX 的 MYSQL 查询,出现超时错误。
我在 AWS 上有一个 Bitnami NGINX Wordpress 堆栈 Ubuntu 16.
使用 MYSQL 8.0.16
我需要更改 MYSQL(或其他任何地方)中的哪些设置才能阻止此错误?
感谢帮助..
尝试使用 my.cnf 文件并重新启动 MYSQL 但我不知道哪个超时设置,似乎有几个
这是 SQL 查询
REPLACE INTO wp_term_relationships (term_taxonomy_id, object_id) SELECT '272', ID
FROM `wp_posts`
WHERE (
post_title REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
OR post_content REGEXP 'German|Deutsch|Berlin|Hamburg|Munich|München|Cologne|Köln|Frankfurt|Stuttgart|Düsseldorf|Dortmund|Essen|Leipzig|Bremen|Dresden|Hanover|Hannover|Nuremberg|Nürnberg|Duisburg|Bochum|Wuppertal|Bielefeld|Bonn|Münster|Karlsruhe|Mannheim|Augsburg|Wiesbaden|Gelsenkirchen|Mönchengladbach|Braunschweig|Chemnitz|Kiel|Aachen|Halle|Saale|Magdeburg|Freiburg|Krefeld|Lübeck|Oberhausen|Erfurt|Mainz|Rostock|Kassel|Hagen|Hamm|Saarbrücken|Mülheim|Potsdam|Ludwigshafen|Oldenburg|Leverkusen|Osnabrück|Solingen|Heidelberg|Herne|Neuss|Darmstadt|Paderborn|Regensburg|Ingolstadt|Würzburg|Fürth|Wolfsburg|Offenbach|Ulm|Heilbronn|Pforzheim|Göttingen|Bottrop|Trier|Recklinghausen|Reutlingen|Bremerhaven|Koblenz|Bergisch Gladbach|Jena|Remscheid|Erlangen|Moers|Siegen|Hildesheim|Salzgitter|Baden-Württemberg|Bavaria|Bayern|Berlin|Brandenburg|Bremen|Hesse|Hessen|Lower Saxony|Niedersachsen|Mecklenburg-Vorpommern|North Rhine-|Westphalia|Nordrhein-Westfalen|Rhineland-Palatinate|Rheinland-Pfalz|Saarland|Saxony|Sachsen|Saxony-Anhalt|Sachsen-Anhalt|Schleswig-Holstein|Thuringia|Thüringen'
)
AND post_type = 'post'
#3699 - Timeout exceeded in regular expression match.
*update - 不确定如何将图片添加到评论中,所以会在这里添加。
可变设置,为@Rick James 如何列出它们干杯
enter image description here
你应该把正则表达式变成一个特里。
这对引擎来说工作更少,它最多只需要执行 16 步就失败了
而不是它现在正在执行的当前 110 个步骤。
尝试
A(?:achen|ugsburg)|B(?:a(?:den-Württemberg|varia|yern)|er(?:gisch[ ]Gladbach|lin)|ielefeld|o(?:chum|nn|ttrop)|r(?:a(?:ndenbur|unschwei)g|eme(?:rhave)?n))|C(?:hemnitz|ologne)|D(?:armstadt|eutsch|ortmund|resden|uisburg|üsseldorf)|E(?:r(?:furt|langen)|ssen)|F(?:r(?:ankfurt|eiburg)|ürth)|G(?:e(?:lsenkirche|rma)n|öttingen)|H(?:a(?:gen|lle|m(?:burg|m)|n(?:n)?over)|e(?:i(?:delberg|lbronn)|rne|ssen?)|ildesheim)|Ingolstadt|Jena|K(?:a(?:rlsruhe|ssel)|iel|oblenz|refeld|öln)|L(?:e(?:ipzig|verkusen)|ower[ ]Saxony|udwigshafen|übeck)|M(?:a(?:gdeburg|inz|nnheim)|ecklenburg-Vorpommern|oers|unich|önchengladbach|ü(?:lheim|n(?:chen|ster)))|N(?:euss|iedersachsen|or(?:drhein-Westfalen|th[ ]Rhine-)|uremberg|ürnberg)|O(?:berhausen|ffenbach|ldenburg|snabrück)|P(?:aderborn|forzheim|otsdam)|R(?:e(?:cklinghausen|gensburg|mscheid|utlingen)|h(?:einland-Pfalz|ineland-Palatinate)|ostock)|S(?:a(?:a(?:le|r(?:brücken|land))|chsen(?:-Anhalt)?|lzgitter|xony(?:-Anhalt)?)|chleswig-Holstein|iegen|olingen|tuttgart)|T(?:h(?:uringia|üringen)|rier)|Ulm|W(?:estphalia|iesbaden|olfsburg|uppertal|ürzburg)
如果您的引擎不支持 non-capture 语法,请将 (?:
更改为 (
。
另外,如果你想在压缩的
上,你可以将 [ ]
更改为 space
正则表达式。
https://regex101.com/r/iEzw33/1
展开
A
(?: achen | ugsburg )
| B
(?:
a
(?: den-Württemberg | varia | yern )
| er
(?: gisch [ ] Gladbach | lin )
| ielefeld
| o
(?: chum | nn | ttrop )
| r
(?:
a
(?: ndenbur | unschwei )
g
| eme
(?: rhave )?
n
)
)
| C
(?: hemnitz | ologne )
| D
(?:
armstadt
| eutsch
| ortmund
| resden
| uisburg
| üsseldorf
)
| E
(?:
r
(?: furt | langen )
| ssen
)
| F
(?:
r
(?: ankfurt | eiburg )
| ürth
)
| G
(?:
e
(?: lsenkirche | rma )
n
| öttingen
)
| H
(?:
a
(?:
gen
| lle
| m
(?: burg | m )
| n
(?: n )?
over
)
| e
(?:
i
(?: delberg | lbronn )
| rne
| ssen?
)
| ildesheim
)
| Ingolstadt
| Jena
| K
(?:
a
(?: rlsruhe | ssel )
| iel
| oblenz
| refeld
| öln
)
| L
(?:
e
(?: ipzig | verkusen )
| ower [ ] Saxony
| udwigshafen
| übeck
)
| M
(?:
a
(?: gdeburg | inz | nnheim )
| ecklenburg-Vorpommern
| oers
| unich
| önchengladbach
| ü
(?:
lheim
| n
(?: chen | ster )
)
)
| N
(?:
euss
| iedersachsen
| or
(?: drhein-Westfalen | th [ ] Rhine- )
| uremberg
| ürnberg
)
| O
(?:
berhausen
| ffenbach
| ldenburg
| snabrück
)
| P
(?: aderborn | forzheim | otsdam )
| R
(?:
e
(?:
cklinghausen
| gensburg
| mscheid
| utlingen
)
| h
(?: einland-Pfalz | ineland-Palatinate )
| ostock
)
| S
(?:
a
(?:
a
(?:
le
| r
(?: brücken | land )
)
| chsen
(?: -Anhalt )?
| lzgitter
| xony
(?: -Anhalt )?
)
| chleswig-Holstein
| iegen
| olingen
| tuttgart
)
| T
(?:
h
(?: uringia | üringen )
| rier
)
| Ulm
| W
(?:
estphalia
| iesbaden
| olfsburg
| uppertal
| ürzburg
)
让我们检查一下速度:
Regex1: A(?:achen|ugsburg)|B(?:a(?:den-Württemberg|varia|yern)|er(?:gisch[ ]Gladbach|lin)|ielefeld|o(?:chum|nn|ttrop)|r(?:a(?:ndenbur|unschwei)g|eme(?:rhave)?n))|C(?:hemnitz|ologne)|D(?:armstadt|eutsch|ortmund|resden|uisburg|üsseldorf)|E(?:r(?:furt|langen)|ssen)|F(?:r(?:ankfurt|eiburg)|ürth)|G(?:e(?:lsenkirche|rma)n|öttingen)|H(?:a(?:gen|lle|m(?:burg|m)|n(?:n)?over)|e(?:i(?:delberg|lbronn)|rne|ssen?)|ildesheim)|Ingolstadt|Jena|K(?:a(?:rlsruhe|ssel)|iel|oblenz|refeld|öln)|L(?:e(?:ipzig|verkusen)|ower[ ]Saxony|udwigshafen|übeck)|M(?:a(?:gdeburg|inz|nnheim)|ecklenburg-Vorpommern|oers|unich|önchengladbach|ü(?:lheim|n(?:chen|ster)))|N(?:euss|iedersachsen|or(?:drhein-Westfalen|th[ ]Rhine-)|uremberg|ürnberg)|O(?:berhausen|ffenbach|ldenburg|snabrück)|P(?:aderborn|forzheim|otsdam)|R(?:e(?:cklinghausen|gensburg|mscheid|utlingen)|h(?:einland-Pfalz|ineland-Palatinate)|ostock)|S(?:a(?:a(?:le|r(?:brücken|land))|chsen(?:-Anhalt)?|lzgitter|xony(?:-Anhalt)?)|chleswig-Holstein|iegen|olingen|tuttgart)|T(?:h(?:uringia|üringen)|rier)|Ulm|W(?:estphalia|iesbaden|olfsburg|uppertal|ürzburg)
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 110
Elapsed Time: 5.74 s, 5736.58 ms, 5736578 µs
Matches per sec: 958,759
哇,每秒匹配一百万个单词!
"Timeout" 大概是由于对大型 table 的慢查询。因此,让我们解决查询速度问题。
REPLACE
是DELETE
+INSERT
.REPLACE is slow due to the
DELETE. And it will lose
term_order` 如果您已经设置了它。- 考虑改用
INSERT IGNORE
。 WHERE
子句,由于OR
和REGEXP
,需要扫描整个 table。FULLTEXT
索引可以避免这种情况;见下文。- 重构
REGEXP
不会有太大帮助;更改为LIKE
可能会更慢;等等 - 如果超时确实在
REGEXP
引擎内部,那么您可能需要 运行 一次查询几个城市。
FULLTEXT
会大大提高速度。但是,如果您不想朝那个方向发展,下一个最好的办法是将 REPLACE
更改为 INSERT IGNORE
。
FULLTEXT
方法是:
ALTER TABLE wp_posts ADD FULLTEXT(post_title, post_content); -- one-time task
INSERT IGNORE INTO ... (...)
SELECT 272, ID
FROM wp_posts
WHERE MATCH(post_title, post_content)
AGAINST('German Deutsch Berlin Hamburg Munich München ...' IN BOOLEAN MODE)
(根据 MySQL 的版本和所使用的 ENGINE
的不同,重音处理可能存在问题。)
SET GLOBAL regexp_time_limit=1024;
(有关文档,请参阅 here)