[MDEV-7901] re-implement analyze table for low impact Created: 2015-04-03 Updated: 2021-01-29 Resolved: 2016-08-03 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Admin statements |
| Fix Version/s: | 10.2.2 |
| Type: | Task | Priority: | Major |
| Reporter: | Daniel Black | Assignee: | Oleksandr Byelkin |
| Resolution: | Fixed | Votes: | 7 |
| Labels: | verified | ||
| Issue Links: |
|
||||||||||||||||||||||||||||||||
| Sprint: | 10.1.6-1, 10.1.6-2, 10.1.7-1, 10.2.0-5, 10.2.0-6, 5.5.51 & 10.2.2 | ||||||||||||||||||||||||||||||||
| Description |
|
MDEV-7196 suggested by jplindst indicated that perhaps a full scan is more appropriate to give better statistics. Obviously this isn't going to help the locking scenario at all. So perhaps, instead of locking the entire table, the analyze table takes a full table scan in incremental blocks. These block sizes should try to scale to something that keeps the lock time less that a goal time, a new variable max_analyze_table_lock_time (locks can be dropped in analyze table gets there too soon). Analyze table being a long running operation should drop to read committed (or uncommitted?) mode to keep the undo logs from growing because of the intensive read operations. |
| Comments |
| Comment by Sergei Petrunia [ 2015-04-04 ] |
|
Removing analyze-stmt label . That label is for ANALYZE statement feature (https://mariadb.com/kb/en/mariadb/analyze-statement ), which has nothing to do with "ANALYZE table" statements.s |
| Comment by Sergei Golubchik [ 2015-04-04 ] |
|
I don't see why ANALYZE TABLE that collects engine-independent statistics needs to take table locks at all. It could do a lock-less consistent read on InnoDB, just like a normal SELECT * does. |
| Comment by Michael Widenius [ 2015-07-07 ] |
|
Agree with Sergei Golubchick; For InnoDB and XtraDB using lock-less select and even running in not-repeatable mode should allow analyze to run without any notable performance degredation. When it comes to MyISAM and Aria, there is two possibilties:
|
| Comment by VAROQUI Stephane [ 2015-07-30 ] |
|
Would be nice to introduce ISET Independent Storage Engine Throttling API. We can upgrade EITS system tables via such plugin, but can also get an auto schedule backup by streaming chunk and Binlog Row Events between chunks. Some plugin can be use for maintenance like deleting rows based on on expiration date and column name |
| Comment by Daniel Black [ 2015-08-31 ] |
|
Was any progress made? Can this be pushed to a public branch so continuation work can be done? |
| Comment by Oleksandr Byelkin [ 2015-08-31 ] |
|
We found it too big changes to squeeze it just before RC release. |
| Comment by Daniel Black [ 2015-08-31 ] |
Is that due to the MyISAM/Aria complexity monty mentioned? If so can that part be put as a independent deferred request? After all, in a very large proportion of the time, innodb tables are the only ones that impact operations. |
| Comment by Oleksandr Byelkin [ 2015-08-31 ] |
|
Mostly because very probable delay of stable version due to fixing errors in this part. |
| Comment by Oleksandr Byelkin [ 2016-08-01 ] |
|
done with innodb relaxed locks |
| Comment by Oleksandr Byelkin [ 2016-08-01 ] |
|
revision-id: fc42991720838e165ad448b6707602cded92faa4 (mariadb-10.2.1-9-gfc42991)
Table before collecting engine independent statistics now is reopened in read mode, — |
| Comment by Daniel Black [ 2016-08-01 ] |
|
Thank you so much sanja |
| Comment by Oleksandr Byelkin [ 2016-08-03 ] |
|
revision-id: 810e5ae2eb8d7bdc1dc5549865dc9177360b8e62 (mariadb-10.2.1-9-g810e5ae)
Table before collecting engine independent statistics now is reopened in read mode, |
| Comment by Sergei Golubchik [ 2016-08-03 ] |
|
ok to push |