$ obj-> dbi_commit (); может быть то, что вы ищете, если у вас есть незавершенные транзакции. Однако это маловероятно, поскольку имеет тенденцию автоматически завершать любые длительные транзакции при уничтожении.
Когда вы делаете это:
Music::Artist->purge_object_index_every(2000);
Вы говорите ему проверять кэш объектов при каждой загрузке 2000 объектов и удалять любые мертвые ссылки для экономии памяти. Я не думаю, что это то, что вы хотите вообще.
Кроме того,
Music::DBI->clear_object_index();
Удаляет все объекты из индекса живого объекта. Я не знаю, как это могло бы помочь вообще; на самом деле это не сброс их на диск.
Похоже, что то, что вы пытаетесь сделать, должно нормально работать, как у вас, но может быть проблема с вашим SQL или где-то еще, которая препятствует работе INSERT или UPDATE. Проводите ли вы проверку ошибок для каждого запроса к базе данных, как предлагает perldoc? Возможно, вы можете начать там или в журналах ошибок своей базы данных, наблюдая за запросами, чтобы увидеть, почему они не завершаются или когда они вообще приходят.
Надеюсь, это поможет!