[MDEV-12958] aria engine transaction logging for a table is enabled by default. Created: 2017-05-30 Updated: 2017-06-13 Resolved: 2017-06-01 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Documentation, Storage Engine - Aria |
| Affects Version/s: | 10.1.22 |
| Fix Version/s: | N/A |
| Type: | Bug | Priority: | Major |
| Reporter: | Yuriy Vasylchenko | Assignee: | Ian Gilfillan |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
General Linux |
||
| Description |
|
The data manipulation statements trigger writes into aria transaction log(s) for the tables created with DEFAULT engine options.
|
| Comments |
| Comment by Sergei Golubchik [ 2017-05-31 ] | ||||||||||||
|
Aria is not a default storage engine. If you configured your default storage engine to be Aria, then, naturally, all tables will be created in this engine, unless you specify differently in CREATE TABLE statement. | ||||||||||||
| Comment by Yuriy Vasylchenko [ 2017-05-31 ] | ||||||||||||
|
Sergei, The aria engine was used on purpose (--default-storage-engine=aria). The problem is that the transaction logging happens for tables created without explicitly specified "TRANSACTIONAL=1" option, while the documentation says opposite:
The documented behavior is reasonable for the engine serving as the replacement for MyISAM and confirmed by Monty in MDEV-5649. To demonstrate the existence of the problem I created the table using default options and immediately after data insertion I found the unexpected transaction record in the on-disk aria transaction log file. I was not able to find build-time or run-time configuration options to control this behavior. | ||||||||||||
| Comment by Yuriy Vasylchenko [ 2017-06-01 ] | ||||||||||||
|
Actually, the simple change fixed the current behavior for me:
| ||||||||||||
| Comment by Sergei Golubchik [ 2017-06-01 ] | ||||||||||||
|
The default row format is PAGE, and the PAGE by default means transactional. The logic is:
| ||||||||||||
| Comment by Ian Gilfillan [ 2017-06-01 ] | ||||||||||||
|
Added this clarification to the docs | ||||||||||||
| Comment by Yuriy Vasylchenko [ 2017-06-01 ] | ||||||||||||
|
I still find the documentation incomplete and somewhat misleading: And Monty was wrong in his comment for MDEV-5649 | ||||||||||||
| Comment by Ian Gilfillan [ 2017-06-08 ] | ||||||||||||
|
monty, serg can you comment on this? The explanation above and in MDEV-5649 do seem to be in conflict, and from my testing Sergei's comment seems accurate. Did something change, or is the distinction simply that the table is transactional by default, but TRANSACTION=1 is not explicitly set by default (even though one implies the other)? In the latter case, this is confusing, and the docs would need some clarifying. | ||||||||||||
| Comment by Sergei Golubchik [ 2017-06-12 ] | ||||||||||||
|
I see only one comment that monty made in MDEV-5649, and the only relevant part of it seems to be “TRANSACTIONAL=1 is not on by default”. This is, strictly speaking, correct. There are three possibilities, TRANSACTIONAL=1, TRANSACTIONAL=0, TRANSACTIONAL not specified. By default, you get the third possibility, not the first. It only means that you will not see TRANSACTIONAL=1 if you do SHOW CREATE TABLE. | ||||||||||||
| Comment by Ian Gilfillan [ 2017-06-13 ] | ||||||||||||
|
Monty's comment is unclear as it implies that because TRANSACTIONAL=1 is not explicitly set, the points he lists as taking place when TRANSACTIONAL=1 is set do not occur, when in fact they do, because the table is still transactional by default. But the behaviour is clear, so I'll look at improving the wording on the docs. |