CodeSOD:最後のID ノート

CodeSOD:最後のID

クリスの会社は、クラウドプロバイダーBでホストされているWebアプリケーションが、クラウドプロバイダーAのMySQLデータベースとやり取りした際に、予期せぬデータ転送コストの急増に直面しました。彼らは毎月ギガバイト程度のデータ転送しか予想していませんでした。しかし、実際にはテラバイト規模のデータ転送が発生しており、予算を大幅に超過していました。調査の結果、すべてのINSERT操作が膨大な量のデータを取得していることが判明しました。根本原因は、SQLクエリの誤りでした。具体的には、「SELECT last_insert_id() FROM some_table_name」というクエリでした。このクエリは、単に最後に挿入されたIDを取得するのではなく、指定されたテーブルのすべての行に対してそのIDを返すように指示されていました。テーブルには数百万行のデータがあったため、各INSERT操作ごとに、最後に挿入されたIDが数百万回繰り返されて返されることになりました。その結果、各INSERT操作で約30MBもの大量のデータ転送が発生していました。技術的な修正の実装は簡単でした。しかし、Web開発会社とそのホスティング環境との連携、テスト、デプロイを含め、変更の調整には6週間かかりました。この時間の一部は、Web開発者に問題が実際に発生しており、それが彼らのコードによって引き起こされていることを納得させるために費やされました。