|
|
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть такая проблема. При проектировании БД (MS SQL 2000) не учли фактор разрастания БД. MDF стал занимать больше 2 Гиг. Запросы стали выполняться очень медленно. Старые данные нельзя бэкапнуть и удалить - они могут понадобиться в любой момент(такова задача). Также нет возможности ускорить железо. Ищу способ поудачнее разбить базу по годам. Вроде бы очевидный способ - сделать отдельные БД для каждого года, но тогда придётся править много клиентского софта, да и данные из двух(или более) разных БД получать напряжно. Знатоки, поделитесь опытом. Наверняка есть какие-то шаблоны - задача по сути типовая. Может посоветуете, где почитать на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 10:12 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
Издеваетесь что ли? Разбивать базу размером в 2Гб -- это сильно. Всяко проще запросы пооптимизировать. Индексы-то нужные есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 10:35 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
2Нахлобуч 2 Гиг за год, а дальше - больше будет Оптимизацией занимаемся, но не особенно помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 11:12 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
karafutoMDF стал занимать больше 2 Гиг. Запросы стали выполняться очень медленно. Также нет возможности ускорить железо. Суммарно эти фразы создают не очень вероятную картину. Я могу представить себе пару вариантов, когда действительно нельзя, но..... karafutoИщу способ поудачнее разбить базу по годам. Вроде бы очевидный способ - сделать отдельные БД для каждого года, но тогда придётся править много клиентского софта, да и данные из двух(или более) разных БД получать напряжно. Если Вы собираетесь именно разбивать, то "много править" и "напряжно" никуда не денется во-первых, и далеко не факт, что поможет - во-вторых. karafutoЗнатоки, поделитесь опытом. Наверняка есть какие-то шаблоны - задача по сути типовая. Типовой ответ - желание разбить (логически+физически) объекты чаще всего неоправданно. Только физическое разбиение (партиционирование) - бывает полезно, но обычно при данных на пару порядков объемнее. Технически можно попробовать сохранить логическую модель, обновив или внедрив слой абстракции - скажем, разбить таблицу T на таблицы T1, T2, ... T5, а также сделав представление T, объединяющее данные этих таблиц. Однако, обычно это не лучшим образом сказывается на скорости. karafutoМожет посоветуете, где почитать на эту тему. Думаю, Вам таки стоит: 1. Описать свою ситуацию с железом - будет чертовски глупо, если на переделку софта уйдет больше средств, чем на апгрейд железа 2. Написать в форум MSSQL просьбу подсказать по оптимизации ваших запросов И только если в ответе на второй пункт выползет необходимость разбиения - там же поднять эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 11:51 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
Размер базы вашей не велик, прямо скажу. Оптимизация по скорости, это написание "правильных" запросов и использование индексов, там где они нужны. А по поводу "разбиения по годам", в этом есть смысл. Только при этом оптимизация по скорости будет в противовес размеру базы. Грубо говоря принцип такой: не хотим долго считать - храним излишние данные. Например, для определения остатка на складе можно пробежаться запросом по всей таблице движений получаю расход и приход. А можно считать данные, хранящиеся на конец периода (года, месяца) и начать бежать оттуда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 12:50 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
Как вариант "из пушки по воробьям" - перейти на 2005 и заюзать "всю его мощу" - включая партиционирование. Как мини-вариант - сделать мини-бэкап базы с минимумом данных, написать список "типовых вызовов" и сказать мне - где это всё лежит :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 15:18 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
locky Как мини-вариант - сделать мини-бэкап базы с минимумом данных, написать список "типовых вызовов" и сказать мне - где это всё лежит :) А ето Вам зачем ;-)) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 15:44 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
karafuto wrote: > А ето Вам зачем ;-)) ? Посижу, поковыряюсь... Скушно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 15:47 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
locky Посижу, поковыряюсь... Скушно. Спасибо за заботу. Боюсь не получится.Но за совет про 2005 - спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 15:56 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
karafuto wrote: > Спасибо за заботу. Боюсь не получится.Но за совет про 2005 - спасибо. Не забудьте только про ремарку - "из пушки по воробьям" :) А так - в профильный форум с "тяжелыми запросами". Не забудьте только почитать "правила оформления постов" - дабы облЕгчить жизнь людям, и дабы не послали читать "правила оформления постов". Также можно посмотреть Read80Trace с сайта MS http://support.microsoft.com/kb/887057 Description of the SQL Server Performance Analysis Utilities Read80Trace and OSTRESS Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 16:01 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
В общем то вопрос актуальный. Если отбросить шутки в сторону, то наверное задумываться над объемом базы, точнее над количеством записей в таблицах, приходится многим. У нас этот вопрос также стал уже остро. Пока в планах разделить таблицу операций на две части - оперативную и архивную. На архивную можно нацеплять кучу индексов для различных целей выборки - т.к. insert и update по ней практически не будет проходить, то это не повлияет на производительность (перенос в архив не считается). softwarerТолько физическое разбиение (партиционирование) - бывает полезно, но обычно при данных на пару порядков объемнее. Может Вы в курсе, можно ли одну таблицу в SQL 2000 разбить на несколько физических частей? Смысл - транспортировка, архивы, восстановление по частям. И обязателен ли при этом метод full recovery? softwarerТехнически можно попробовать сохранить логическую модель, обновив или внедрив слой абстракции - скажем, разбить таблицу T на таблицы T1, T2, ... T5, а также сделав представление T, объединяющее данные этих таблиц. Однако, обычно это не лучшим образом сказывается на скорости.. Если разбивка некоторой большой таблицы осуществляется по времени, а параметром вермени является некоторое поле таблицы, то объединение данных требутся по вертикали. При модификации запроса на выборку данных "в лоб" написал бы вместо одного запроса несколько ченез Union. Интересно, как сделать в таком случае представление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 18:59 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
PVPУ нас этот вопрос также стал уже остро. Переходите на Oracle ;-) PVPНа архивную можно нацеплять кучу индексов для различных целей выборки .... Может, стоит сразу думать о перетаскивании данных в хранилище с аналитикой? PVP softwarerТолько физическое разбиение (партиционирование) - бывает полезно, но обычно при данных на пару порядков объемнее. Может Вы в курсе, можно ли одну таблицу в SQL 2000 разбить на несколько физических частей? Смысл - транспортировка, архивы, восстановление по частям. И обязателен ли при этом метод full recovery? Не буду врать, лучше спросить у людей "оттуда". PVPПри модификации запроса на выборку данных "в лоб" написал бы вместо одного запроса несколько ченез Union. Интересно, как сделать в таком случае представление? А что есть представление, как не запрос "вместо"? :) Тут основной интерес - чтобы представление не трогало всех таблиц, если запрос идет только к одной. То есть что-то типа Код: plaintext 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. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 19:39 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: Для SQL2k5 - тоже самое, т.е. идет обращение только к одной таблице. К сожалению, не умю смотреть в оракле что будет для примерно такого запроса? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 21:10 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
В SQL2k5 получаем Код: plaintext 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. т.е. при использовании переменной - план куда хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 21:12 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
lockyВ SQL2k5 получаем ..... т.е. при использовании переменной - план куда хуже. Глядя на этот план, я бы не сказал, что он наверняка хуже. Это зависит от того, как именно он будет выполняться - отсечет ли FILTER ненужную ветку или таки "сначала выполнит, потом отсечет". lockyК сожалению, не умю смотреть в оракле что будет для примерно такого запроса? Во всех подробностях, к сожалению, ответить не смогу - поведение здесь менялось в девятой версии по сравнению с восьмой, а в десятой по сравнению с девятой, и я не готов ручаться за предыдущие версии. Если смотреть план оторванно, сам по себе, он будет в целом таким же, как у меня выше - только с двумя выражениями FILTER, поскольку сервер не сможет раскрыть одно из них в тождественное true. Вычислится он также нормально. В рантайме одно из условий filter даст true, другое false, соответственно будет сделан только один full scan (я не ткну пальцем в соответствующую цитату из документации, но проверил по времени выполнения при том и другом значении переменной). Вообще, интересная тема, всплывающая не в этом случае, но по соседству - так называемая bind variable peeking; оптимизатор может "подсмотреть" значение из переменной и строить план под него. Но это отдельный большой рассказ, к которому я не очень готов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 23:34 |
|
||
|
Разбивка БД по годам
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > Вообще, интересная тема, всплывающая не в этом случае, но по соседству - > так называемая bind variable peeking; оптимизатор может "подсмотреть" > значение из переменной и строить план под него. Но это отдельный большой > рассказ, к которому я не очень готов. В 2005 появился новых хинт для стейтмента, recompile, который позволяет перекомпилировать конкретный стейтмент С УЧЕТОМ актуальных значений переменных и содержимого временных таблиц/table vars. Достаточно забавная штука - сочетает в себе прелести как динамического так и статического SQL - без прочих их недостатков :) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 12:23 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34603806&tid=1544443]: |
0ms |
get settings: |
10ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
211ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 521ms |

| 0 / 0 |
