Currently when purging dangling references from the log_action table, we lock it in order to make sure we don't accidentally delete a row that ends up being referenced during tracking. This is problematic, since purging log_action can take a long time, and blocks tracking while it is running.
The proposed solution is to remove the need for locking by:
ACTION_DELETED. the tracker cannot use an action whose type is
ACTION_DELETED. then running queries to delete all ACTION_DELETED actions.
Issues w/ concurrency must be reviewed carefully when implementing. Eg, we must ensure situations like the following do not occur:
Which issue is this a duplicate of?
@tsteur No, it was mentioned in slack but we don't have a paid account so we can't look that far back.
Regularly people report issues with this locking mechanism. It would make Matomo that bit more stable if log_action deletion required no table locking. The workaround currently is to run the process less often for example once a year with
delete_logs_unused_actions_schedule_lowest_interval = 365 or once a month. But that only postpones the problem or make it happen less often. (Also deleting unused actions less often means that the table has more data, and it takes longer to insert into it, update indexes, makes tracking a little slower)