Hi,
The issue comes from your regex pattern .*s3.*. In MySQL, REGEXP already matches anywhere in the string, so the .* on both sides is redundant. It forces the regex engine to consume the entire description text and then backtrack through it, which on long HTML descriptions triggers MySQL's regex timeout. That's why changing the limitation from 8000 to 1000 didn't help because the timeout happens on individual product descriptions, not on the total number of products processed.
Your workaround of switching to a non-regex search method was the right call. The CONTAINS operator translates to a SQL LIKE query which is much more efficient for simple text searches like this.
If you ever need REGEXP specifically, just use s3 as the pattern instead of .*s3.*
It does the same thing without the backtracking issue.