Zapewne nie jeden DBA czy deweloper, mający choć trochę do czynienia z silnikiem SQL Server, zastanawiał się, w czym mierzony jest koszt podawany na planach wykonania zapytań (
Estimated Query Cost w rozbiciu na m.in.
Estimated I/O Cost,
Estimated CPU Cost,
Estimated Subtree Cost itd.). Zdrowy rozsądek podpowiadał, że nie jest to wartość odpowiadająca określonej liczbie sekund, a jedynie arbitralnie dobrana jednostka, mająca pełnić funkcję punktu odniesienia dla porównywania kosztów poszczególnych planów. Dało się czasami usłyszeć, że jest to tzw. jednostka (sekunda) wzorcowa wyznaczona na jednej z benchmarkowych maszyn w MS. Wydawało się to całkiem prawdopodobne. Teraz jest już potwierdzone. Co więcej, wiadomo jak wyglądał ten wzorcowy superkomputer :) Oto i on (kliknij, aby zobaczyć powiększoną wersję):
Historia przedstawia się następująco: wiele lat temu (czasy SQL Server 7.0), gość o imieniu Nick otrzymał zadanie, aby mierzyć czasy zapytań dla team'u query optimizera. Opracował więc prostą metodę, w której jednostka kosztu odpowiadała sekundzie wykonywania się zapytania na jego testowej maszynie. Traf chciał, że metoda ta stała się podstawą wyznaczania kosztu zapytań przez optymalizator kwerend począwszy od ówczesnej wersji silnika, na wersji obecnej skończywszy. Podobno wiele razy przymierzano się do zmiany tego sposobu, jednak ze względu na to, że był on mocno pożeniony z wnętrznościami silnika, zawsze zostawiano go w spokoju. I niech ktoś teraz powie, że w IT nie rządzi przypadek.
Więcej informacji:
Christian Bolton: What's the cost?