[openstack-dev] [nova] Did you know archive_deleted_rows isn't super terrible anymore?
melanie witt
melwittt at gmail.com
Fri Sep 29 19:11:32 UTC 2017
On Fri, 29 Sep 2017 13:49:55 -0500, Matt Riedemann wrote:
> For awhile now actually.
>
> Someone was asking about when archive_deleted_rows would actually work,
> and the answer is, it should since at least mitaka:
>
> https://review.openstack.org/#/q/I77255c77780f0c2b99d59a9c20adecc85335bb18
>
> And starting in Ocata there is the --until-complete option which lets
> you run it continuously until its done, rather than the weird manual
> batching from before:
>
> https://review.openstack.org/#/c/378718/
>
> So this shouldn't be news, but it might be. So FYI.
True that. However, I want to give people a heads up about something I
learned recently (today actually). I think problems with archive can
arise if you've restarted your database after archiving, and attempt to
do a future archive. The InnoDB engine in MySQL keeps the AUTO_INCREMENT
counter only in memory, so after a restart it selects the maximum value
and adds 1 to use as the next value [1].
So if you had soft-deleted rows with primary keys 1 through 10 in the
main table and ran archive_deleted_rows, those rows would get inserted
into the shadow table and be hard-deleted from the main table. Then, if
you restarted the database, the primary key AUTO_INCREMENT counter would
be initialized to 1 again and the primary keys you had archived would be
reused. If those new rows with primary keys 1 through 10 were eventually
soft-deleted and then you ran archive_deleted_rows, the archive would
fail with something like, "DBDuplicateEntry:
(pymysql.err.IntegrityError) (1062, u"Duplicate entry '1' for key
'PRIMARY'")". The workaround would be to delete or otherwise move the
archived rows containing duplicate keys out of the shadow table.
-melanie
[1]
https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization
More information about the OpenStack-dev
mailing list