У меня есть запрос DB2 по схеме TPC-H, которую я пытаюсь оптимизировать с помощью индексов. Я могу сказать из вывода db2expln, что оценочные затраты значительно ниже (300%) при наличии индексов. Тем не менее, я также пытаюсь измерить время выполнения и существенно не изменяется при выполнении запроса с использованием индексов.Оптимизация запроса DB2 - почему вывод bash «time» остается неизменным?
Я работаю в SSH терминал, выполняя мои запросы и писать вывод в файл, как
(time db2 "SELECT Q.name FROM
(SELECT custkey, name FROM customer WHERE nationkey = 22) Q WHERE Q.custkey IN
(SELECT custkey FROM orders B WHERE B.orderkey IN
(SELECT orderkey FROM lineitem WHERE receiptdate BETWEEN '1992-06-11' AND '1992-07-11'))") &> output.txt
Я сделал 10 измерений каждый: 1) без индексов, 2) с индексом на lineitem.receiptdate, 3) с индексами на lineitem.receiptdate и customer.nationkey, рассчитанное среднее время и стандартное отклонение, все находятся в одном диапазоне. Я выполнил RUNSTATS ON TABLE schemaname.tablename AND DETAILED INDEXES ALL
после создания индекса.
Я прочитал this сообщение о выходе команды time
, от того, что я понимаю sys
+ user
время должно иметь значение для моего измерения. Нет изменений в добавленных sys
+ user
времени, а не в real
.
sys + пользователь составляет около 44 мс, реальный составляет около 1 с.
Любые подсказки, почему я не вижу изменения во времени? Я интерпретирую time
выход неправильно? Являются ли оценки оптимизаторов в db2expln
вводящими в заблуждение?
Отказ от ответственности: Я должен представить презентацию об этом в университете, поэтому это технически домашнее задание, но поскольку это скорее вопрос понимания, а не «просьба сделать мой код работы», я надеюсь, что это целесообразно разместить здесь. Кроме того, я знаю, что запрос может быть упрощен, но мой вопрос не в этом.
Как долго длится запрос? «время» не будет надежным ни для чего, кроме нескольких сотен мс. –
отредактирован, поэтому, возможно, мой запрос слишком короткий. это потому, что время выполнения собственного времени слишком велико, как описано [здесь] (http://stackoverflow.com/questions/9006596/is-the-unix-time-command-accurate-enough-for-benchmarks)? –
Вам также необходимо понять, что «время» измеряет системное время + пользовательское время процессора для выполняемого им процесса. В этом случае он измеряет время процессора для процесса 'db2' переднего конца. Этот процесс связывает (через IPC) с другим процессом (DB2 Backend Process - 'db2bp'), который связывается через TCP/IP или IPC с механизмом базы данных DB2.Никакое процессорное время, затрачиваемое на бэкэнд-процесс или механизм базы данных, не будет указано в '' sys''''' пользователя'. –