Таким образом, моя команда потратила буквально пару месяцев, пытаясь понять эту проблему и многие другие несоответствия (как, например, в этом сообщении), которые мы смогли воспроизвести на AWS Aurora DB 5.7, но не смогли воспроизвести на MySQL 5.7 или что-либо еще в этом отношении.
В рамках этих усилий мы задействовали поддержку AWS, которая была на удивление бесполезной. Они подтвердили, что могут воспроизвести несоответствия, выполнив те же запросы, которые мы выполняли в той же базе данных, что и мы, но затем сказали, что не могут скопировать эти данные в другую базу данных и все еще воспроизвести проблему, и это, похоже, удовлетворило их, чтобы отметить поддержку дело как решено. Теперь, конечно, это очень коварный дефект, поскольку его так сложно воспроизвести, и он настолько прерывистый и редкий, но когда он поражен, он становится надежно воспроизводимым в пределах затронутого набора данных. И как только вы обнаружите этот дефект, ваши приложения, зависящие от базы данных, больше не смогут корректно работать в этих уязвимых областях;)
Хотя мы не считаем, что дефект ограничен каскадным удалением, похоже, что способ «более надежного» создания этого дефекта состоит в удалении строк в таблицах с каскадным удалением. Опять же, это, кажется, производит дефект "более надежно", но даже тогда, это невероятно редко и трудно произвести. Однако мы могли бы создать его, запустив огромный автоматизированный набор тестов в тесном цикле. Опять же, как только вы действительно обнаружите этот дефект, затронутые данные будут надежно воспроизводить несоответствия - просто ОЧЕНЬ трудно устранить этот дефект.
Итак, какие выводы мы сделали в конце всего нашего анализа?
1) Во-первых, Торстен Кеттнер (см. Его опубликованный комментарий выше) является правильным - это дефект самого сервера RDBMS. У нас нет доступа к исходному коду AWS AuroraDB или к базовой инфраструктуре, и поэтому мы не можем устранить эту ошибку из-за какой-то более конкретной проблемы, но, возможно, это дефект сервера RDBMS, возможно, уровня персистентности данных и, возможно, где-то еще.
2) Исходя из (1) выше, мы решили, что AWS Amazon 5.7.x недостаточно совершенен для использования в рабочих приложениях. Несмотря на то, что он работает правильно в 99,9999% случаев, 0,0001% приводило к тому, что серверы баз данных разработки и производства совершали неправильные действия и возвращали неверные результаты, что для нас абсолютно неприемлемо. Мы также обнаружили случаи, когда ограничения целостности таблиц не были надежно соблюдены, что привело к появлению очень странных потерянных строк, которые должны были быть удалены как часть каскадного удаления в определении схемы, что опять-таки абсолютно неприемлемо для нас.
3) Нам не удалось воспроизвести любое из этих несоответствий в AWS MySQL 5.6, AWS MySQL 5.7, AWS AuroraDB с совместимостью с MySQL 5.6, не-AWS Windows MySQL 5.6 или не-AWS MySQL 5.7. Короче говоря, мы считаем, что все, что идет не так, характерно для AWS AuroraDB с совместимостью с MySQL 5.7. Мы провели обширное тестирование AWS AuroraDB, в частности, с совместимостью с MySQL 5.6, и не смогли воспроизвести ни одного из этих дефектов несоответствия, поэтому в настоящее время мы считаем, что AuroraDB с совместимостью с MySQL 5.6 является зрелым и пригодным для производственного использования.