|
|
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Запрос находит суммарную выручку от продажи билетов по каждой из планет. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. После выполнения некоторых действий время выполнения отдельно взятого запроса уменьшится примерно в 10-30 раз. Скрипт инициализации. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. Схема БД Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. Были использованы разные индексы, но что то всё бестолку. Помогитие решить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 10:00 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobskiПосле выполнения некоторых действий время выполнения отдельно взятого запроса уменьшится примерно в 10-30 раз. А что за действия? И можно глянуть `EXPLAIN (analyze, buffers)` для разных по скорости вариантов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 10:07 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Модель непонятна. Здесь 2 Таблицы фактов - полеты и букинги!! Достаточно 1-й такого вида: например Booking будет иметь такую структуру: ref_num, pax_id, spacecraft_id, commander_id, planet_id, date. После чего тривиальным запросом получаются все суммы. Код: sql 1. 2. 3. 4. 5. Мало того, тут можно еще денормализовать засунув в этот факт кроме spacecraft_id еще и spacecraft_class - минус один джоин на Spacecraft. Мало того можно и дальше денормализовать избавившись от таблицы price Цену запихнуть сразу в Booking. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 12:29 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
а сейчас кстати весь ужас в кореллированной функции GetPaxCount которая вызывается столько раз - сколько записей в price. Переписать это - уже на порядок все шустрее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 12:35 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. например так. А индексами уже тюнинговать в самам конце. Когда с моделью все ок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 12:37 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, вся проблема в том, что менять нельзя структуру базы данных и необходимо оптимизировать именно данный запрос с помощью индексов или изменив процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 14:14 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobskiIvan Durak, вся проблема в том, что менять нельзя структуру базы данных и необходимо оптимизировать именно данный запрос с помощью индексов или изменив процедуру. если целостность поддерживается -- то у вас минимум один лишний джойн. (ни на что особо не влияет) использование immutable для таблично обусловленых данных -- опасный хак. требует безусловной перезагрузки ф-ии послс изменения данных. (считай -- в тексте триггеров на каждой таблице обязаны висеть тексты create or replace-ов этих ф--й, что приведет к очередям на тела ф--й.). т.е. это скорее баг, за который надо убивать. (в 1-м месте для константы БД этим пользуюсь сам). ну и если не опускаться до бессмысленных требований -- то как--то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ------------------------------------ Hash Right Join (cost=11610.04..11620.56 rows=300 width=20) (actual rows=300 loops=1) Hash Cond: ((cnts.planet_id = price.planet_id) AND (cnts.spacecraft_class = price.spacecraft_class)) Buffers: shared hit=1597 CTE cnts -> HashAggregate (cost=11597.54..11600.54 rows=300 width=12) (actual rows=300 loops=1) Group Key: s.class, p.id Buffers: shared hit=1595 -> Hash Join (cost=2823.54..10097.54 rows=200000 width=12) (actual rows=200000 loops=1) Hash Cond: (b.flight_id = f.id) Buffers: shared hit=1595 -> Seq Scan on booking b (cost=0.00..3274.00 rows=200000 width=8) (actual rows=200000 loops=1) Buffers: shared hit=1274 -> Hash (cost=2198.54..2198.54 rows=50000 width=12) (actual rows=50000 loops=1) Buckets: 8192 Batches: 1 Memory Usage: 1758kB Buffers: shared hit=321 -> Hash Join (cost=4.54..2198.54 rows=50000 width=12) (actual rows=50000 loops=1) Hash Cond: (f.spacecraft_id = s.id) Buffers: shared hit=321 -> Hash Join (cost=3.25..1509.75 rows=50000 width=12) (actual rows=50000 loops=1) Hash Cond: (f.planet_id = p.id) Buffers: shared hit=320 -> Seq Scan on flight f (cost=0.00..819.00 rows=50000 width=12) (actual rows=50000 loops=1) Buffers: shared hit=319 -> Hash (cost=2.00..2.00 rows=100 width=4) (actual rows=100 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 3kB Buffers: shared hit=1 -> Seq Scan on planet p (cost=0.00..2.00 rows=100 width=4) (actual rows=100 loops=1) Buffers: shared hit=1 -> Hash (cost=1.13..1.13 rows=13 width=8) (actual rows=13 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 1kB Buffers: shared hit=1 -> Seq Scan on spacecraft s (cost=0.00..1.13 rows=13 width=8) (actual rows=13 loops=1) Buffers: shared hit=1 -> CTE Scan on cnts (cost=0.00..6.00 rows=300 width=16) (actual rows=300 loops=1) Buffers: shared hit=1595 -> Hash (cost=5.00..5.00 rows=300 width=12) (actual rows=300 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 11kB Buffers: shared hit=2 -> Seq Scan on price (cost=0.00..5.00 rows=300 width=12) (actual rows=300 loops=1) Buffers: shared hit=2 Planning time: 0.665 ms Execution time: 298.093 ms все индексы для вторички созданы, но не используются для массового расчета гораздо веселее , что timing ON подвешивает план на порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:01 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobskiIvan Durak, вся проблема в том, что менять нельзя структуру базы данных и необходимо оптимизировать именно данный запрос с помощью индексов или изменив процедуру. последний вариант пробовал? CREATE OR REPLACE FUNCTION Benchmark2() RETURNS TABLE(planet_id INT, spacecraft_class INT, takings BIGINT) AS $$ SELECT P.planet_id, P.spacecraft_class, P.price * count(B.pax_id) FROM Booking B inner join Flight F on B.flight_id = F.id inner join Spacecraft S ON F.spacecraft_id = S.id inner join Price P on P.planet_id = F.planet_id and P.spacecraft_class = S.class group by P.planet_id, P.spacecraft_class, P.price; $$ LANGUAGE SQL IMMUTABLE; ---------------------------- p.s. А структуру оптимизировать все равно стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:01 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
qwwq использование immutable для таблично обусловленых данных читать -- "функций" (эхолалия детектед) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:03 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
поправил Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:05 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, спасибо огромное. Голова забилась индексами из лекций и соответственно не на что другое внимание обращать не хотела. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:23 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, а как лучше оптимизировать Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. мой вариант как то так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. это не окончательный вариант, но сейчас именно его пытаюсь крутить на машине и запустить, а из и него уже выбирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 13:18 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobski, вам выше написали, что пользоваться IMMUTABLE в вашем случае нельзя. ну и зачем сворачивать больше, если можно свернуть меньше ? вы так и не воткнулись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 14:50 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Это вы там игру космическую делаете?? Так если еще не поздно - 100% незачем вам 2 факта - букинг и флайт! объединить в один - сразу все вычисления проще будут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 15:44 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, ничего не строим задания это такие. stepic.org ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 16:09 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
qwwq, Immutable использовать необходимо поскольку сигнатуру фунцкции менять нельзя.это задание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 17:21 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobski, а теперь, мой маленький друг, пойдите и почитайте, что называется сигнатурой функции http://www.postgresql.org/search/?u=/docs/9.4/&q=signature function и каким боком тут авторIMMUTABLE STABLE VOLATILE These attributes inform the query optimizer about the behavior of the function. At most one choice can be specified. If none of these appear, VOLATILE is the default assumption. оказались сигнатурой. в вашем случае ф-я stable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2015, 18:18 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
qwwq, к сожалению stable, volatile не помогли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 10:22 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobskiqwwq, к сожалению stable, volatile не помогли. если вы про скорость, то да, это не поможет. да и qwwq вам говорил не про скорость, читайте заново и вчитывайтесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 10:56 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, Код: plsql 1. 2. 3. 4. 5. 6. Я только учусь работать с БД, а задания пройти хочется. Данный пример не работает. Помогите оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 11:30 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobski, я вижу синтаксическую ошибку. перепроверте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 11:33 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
FrankDobski, и да, говоря про оптимизацию. смотря на ваш запрос, вам нехочется добавить какой нибудь индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 11:36 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Lonepsycho, я считаю что добавить надо индекс для flight.id. А вот с запросом не могли бы помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 12:33 |
|
||
|
Задача на оптимизацию. Поразмять мозги.
|
|||
|---|---|---|---|
|
#18+
Ivan Durak, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. это мой запрос. Ругается на выделенное. Подскажите как правильно сотавить запрос, чтобы не ругалось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2015, 14:29 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39124819&tid=1997565]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 562ms |

| 0 / 0 |
