RSS Der tägliche WTF
Folgen
CodeSOD: Eine letzte ID
Chris's Unternehmen sah sich mit einem unerwarteten Anstieg der Datentransferkosten konfrontiert, als ihre Webanwendung, die bei Cloud Provider B gehostet wurde, mit einer MySQL-Datenbank bei Cloud Provider A interagierte. Sie rechneten monatlich nur mit Gigabytes an Datentransfer. Stattdessen verzeichneten sie Terabytes, was ihr Budget erheblich überschritt. Die Untersuchung ergab, dass jede Einfügeoperation eine enorme Datenmenge abrief. Die Ursache war eine fehlerhafte SQL-Abfrage: SELECT last_insert_id() FROM some_table_name. Diese Abfrage sollte nicht nur die zuletzt eingefügte ID abrufen, sondern angewiesen wurde sie, diese ID für jede einzelne Zeile in der angegebenen Tabelle zurückzugeben. Da die Tabelle Millionen von Zeilen enthielt, führte dies zu Millionen von Wiederholungen der zuletzt eingefügten ID, die bei jeder Einfügung zurückgesendet wurden. Folglich erzeugte jede Einfügeoperation einen erheblichen Datentransfer von etwa 30 MB. Die technische Behebung war unkompliziert. Die Koordination der Änderung mit dem Webentwicklungsunternehmen und ihrer Hosting-Umgebung, einschließlich Tests und Bereitstellung, dauerte jedoch sechs Wochen. Ein Teil dieser Zeit wurde darauf verwendet, die Webentwickler davon zu überzeugen, dass das Problem tatsächlich auftrat und durch ihren Code verursacht wurde.