|
Подскажите по секционированию.
|
|||
---|---|---|---|
#18+
Всем привет. Есть несекционированая таблица, в которую интенсивно 24/7 идет поставка данных, в данный момент в ней 4 389 359 936 строк. Код: 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.
Мне необходимо ускорить удаление из неё старых данных, простой delete from справляется, но хочется этот процесс ускорить. Секционирование не применял на практике, но знаю, что ренжировав секции по таймштампу, я могу быстро удалять данные секциями. Не где в мануалах по секционированию не встречал информации о том, что секционирование может замедлить вставку (на таблице применяются не уникальные индексы), как секционирование относится к индексам, мне тоже пока не особо ясно. Так же пересоздавать таблицу не хотелось бы, могу ли я создать новые секции на заполненной таблице, пускай и только для новых данных, а старые целиком оставить в секции до сегодняшней даты. Или может я совершенно не прав в своих суждениях? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 17:26 |
|
Подскажите по секционированию.
|
|||
---|---|---|---|
#18+
teCa Мне необходимо ускорить удаление из неё старых данных, простой delete from справляется, но хочется этот процесс ускорить. Секционирование не применял на практике, но знаю, что ренжировав секции по таймштампу, я могу быстро удалять данные секциями. Не где в мануалах по секционированию не встречал информации о том, что секционирование может замедлить вставку (на таблице применяются не уникальные индексы), как секционирование относится к индексам, мне тоже пока не особо ясно. Если сделать ПК по id некластерным, то могут замедлиться запросы. В такой ситуации я бы сделал секционирование по id, примерно подобрав нужный диапазон значений. teCa Так же пересоздавать таблицу не хотелось бы, могу ли я создать новые секции на заполненной таблице, пускай и только для новых данных, а старые целиком оставить в секции до сегодняшней даты. Зависит от свободного пространства, версии сиквела, и требований. Например да, можно всю существующую таблицу разместить в одной большой секции, а новые данные будут добавляться уже в небольшие секции. Оставить обычное удаление, и когда то наступит момент, что можно будет начать удалять секциями. Это самое простое решение, и самое нетребовательное к ресурсам. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:17 |
|
Подскажите по секционированию.
|
|||
---|---|---|---|
#18+
teCa, Переключаете секцию из секционированной таблицы в несекционированную, а затем, последнюю удаляете CREATE TABLE PartitionTable (col1 int, col2 char(10)) ON myRangePS1 (col1) ; GO CREATE TABLE NonPartitionTable (col1 int, col2 char(10)) ON test2fg ; GO ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ; GO DROP TABLE NonPartitionTable https://docs.microsoft.com/ru-ru/sql/t-sql/statements/alter-table-transact-sql?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2019, 13:10 |
|
Подскажите по секционированию.
|
|||
---|---|---|---|
#18+
teCa, Если будете удалять по id, то будет быстро. Собственно, вам нужно только решить, подходит это поле для определения "старости" данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2019, 13:37 |
|
Подскажите по секционированию.
|
|||
---|---|---|---|
#18+
teCa, У вас есть возможность организовать окно и перелить эту таблицу в секционированную? Либо Сделать новую секционированнную и переключиться на неё. Ещё вы не назвали версию SQL SErver. Начиная с 2016 можно truncate делать партиции. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2019, 15:37 |
|
|
start [/forum/topic.php?fid=46&msg=39906312&tid=1686722]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 431ms |
0 / 0 |