14.08.2009, 13:27 | #1 |
Участник
|
Посоветуйте по чистке CustInvoiceTrans
Ax 4.0, SQL 2005
В нашей базе CustInvoiceTrans - самая большая по занимаемому месту таблица (12.5 Гб, 14 млн.записей). В табличке заполнены текстовые поля: (1) Name = описание из таблички InventTxt.txt (там или название номенклатуры, или более расширенный текст, в среднем ну пусть будет 50 знаков). (2) LineHeader = текст вида "Заказ на продажу N такой-то, клиент N такой-то", тоже считаем по 50 знаков. Отчеты или запросы с этими полями нами нигде не используются. Вопрос: даст ли реальную экономию места в базе полная очистка этих полей, и как ее можно было бы грубо оценить ? (скажем, в % от занимаемого сейчас места) Стоит ли такая овчинка выделки? Последний раз редактировалось Zabr; 14.08.2009 в 13:29. |
|
14.08.2009, 13:41 | #2 |
Участник
|
Цитата:
Сообщение от Zabr
Ax 4.0, SQL 2005
В нашей базе CustInvoiceTrans - самая большая по занимаемому месту таблица (12.5 Гб, 14 млн.записей). В табличке заполнены текстовые поля: (1) Name = описание из таблички InventTxt.txt (там или название номенклатуры, или более расширенный текст, в среднем ну пусть будет 50 знаков). (2) LineHeader = текст вида "Заказ на продажу N такой-то, клиент N такой-то", тоже считаем по 50 знаков. Отчеты или запросы с этими полями нами нигде не используются. Вопрос: даст ли реальную экономию места в базе полная очистка этих полей, и как ее можно было бы грубо оценить ? (скажем, в % от занимаемого сейчас места) Стоит ли такая овчинка выделки? Грубая оценка выглядит, так - 50 + 50 = 100 символов = 100 байт на каждую строку, записей 14 млн. => 1400 млн. байт, т.е. порядка 1.2 Гб, т.е. 10%, а стоит ли овчинка выделки, решать Вам P.S. Вот еще не давно обсуждалась тема размер 1 записи (строки)
__________________
Sergey Nefedov Последний раз редактировалось SRF; 14.08.2009 в 13:50. |
|
14.08.2009, 13:44 | #3 |
Участник
|
Цитата:
Сообщение от Zabr
В нашей базе CustInvoiceTrans - самая большая по занимаемому месту таблица (12.5 Гб, 14 млн.записей). В табличке заполнены текстовые поля:
(1) Name = описание из таблички InventTxt.txt (там или название номенклатуры, или более расширенный текст, в среднем ну пусть будет 50 знаков). (2) LineHeader = текст вида "Заказ на продажу N такой-то, клиент N такой-то", тоже считаем по 50 знаков. Вот если эти поля входят в индексы. Тогда да, вставка, обновление и удаление могут серьезно затормозиться. Кроме того, увеличивается время на пересчет статистики. Поэтому: если эти поля не входят в индексы - ну и пусть себе живут. Каши не просят. |
|
14.08.2009, 13:47 | #4 |
Участник
|
Цитата:
Сообщение от mazzy
Дык, ведь... Сам по себе объем не является тормозом для обычных операций. Разве что для полного бэкапа. Или для полной выборки из этих таблиц.
Вот если эти поля входят в индексы. Тогда да, вставка, обновление и удаление могут серьезно затормозиться. Кроме того, увеличивается время на пересчет статистики. Поэтому: если эти поля не входят в индексы - ну и пусть себе живут. Каши не просят.
__________________
Sergey Nefedov |
|
14.08.2009, 13:53 | #5 |
Участник
|
Да, мой вопрос именно об этом. Я не знаю, как Аксапта выделяет место в базе SQL для текстовых полей. Выдаеляет по фактически занимаемому месту? Тогда имеет смысл почистть. Выделяет по размерности поля, заданной в Daata dictionary? Тогда чистить бесполезно. Произойдет ли освобождение места при чистке уже существующих записей, или это место всё равно останется занятым, и экономия будет достигаться только на новых записях, если эти поля не заполнять? Освободит ли место дефрагментация, если сами записи не удалялись, а только чистились в них эти поля ?
|
|
14.08.2009, 13:59 | #6 |
Участник
|
По фактически занимаемому для строк, выравнянных влево.
http://axapta.mazzy.ru/lib/adjustment/ |
|
14.08.2009, 14:04 | #7 |
Участник
|
Цитата:
Цитата:
Сообщение от Zabr
...Произойдет ли освобождение места при чистке уже существующих записей, или это место всё равно останется занятым, и экономия будет достигаться только на новых записях, если эти поля не заполнять? Освободит ли место дефрагментация, если сами записи не удалялись, а только чистились в них эти поля ?...
А вообще не проще ли удалить поля физически, в смысле, повесить на какой-нибудь конфигурационный ключ и отключить его, вель я как понял вы не собираетесь дальше пользоваться этим полями.
__________________
Sergey Nefedov Последний раз редактировалось SRF; 14.08.2009 в 14:05. Причина: P.S. Упс. Опередили. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Aleksey_M (2). |
14.08.2009, 14:05 | #8 |
Участник
|
Цитата:
Фактически занятое место останется прежним. А вот размер базы действительно может уменьшить. SQL хранит данные в страницах. Причем, SQL сознательно заполняет страницы не полностью (тут длинная теория почему именно так. см. BOL). А с диска читаются именно страницы (на самом деле наборы из подряд идущих страниц - кластера). Это значит, что если страницы заполненны не полностью, то диск все равно тратит время и ресурсы на чтение полного кластера. Поэтому чем выше степень заполнения страниц, чем меньше фрагментация, тем меньше дисковых операций будет выполнено для чтения того же набора данных. (Однако высокая степень заполнения может ухудшить время операций вставки и обновления. См. все ту же теорию). Насколько я помню, у вас была очень высокая степень фрагментированности данных. Дефрагментация вам действительно может помочь. Однако дефрагментацию индексов и таблиц с кластерными индексами выполняет ребилд индексов. А он у вас периодически проводится, насколько я помню. Т.е. остается дефрагментация неиндексированных данных. В принципе провести можно. Но у вас сильного эффекта от этой операции я бы не ожидал. |
|
|
За это сообщение автора поблагодарили: Zabr (3). |
14.08.2009, 14:12 | #9 |
Участник
|
Цитата:
По вашему вопросу - если очистить эти поля, то мгновенного эффекта это не даст - место останеся выделенным. Чтобы его отдать в пользование нужно как минимум провести реорганизацию таблички - перестроить индексы (rebuild)? а лучше и всех остальных. Там тоже есть ньюансы - есть на таблтчке кластерный индекс или нет, установленный fillfactor ну и т.д. Мое ИМХО - эффекта на 12Г таблице будет ну очень мало, а гемора прилично. Посмотрите индекса - может есть лишние, они много места занимают. ps Пока писал - уже 2 сообщения похожих ;-) |
|
14.08.2009, 14:15 | #10 |
Участник
|
Цитата:
поэтому надо считать 100 символов = 200 байт |
|
|
За это сообщение автора поблагодарили: SRF (1). |
14.08.2009, 16:12 | #11 |
Модератор
|
Цитата:
Цитата:
В табличке заполнены текстовые поля:
.. Отчеты или запросы с этими полями нами нигде не используются. .. Вопрос: даст ли реальную экономию места в базе полная очистка этих полей, и как ее можно было бы грубо оценить ? (скажем, в % от занимаемого сейчас места) Стоит ли такая овчинка выделки? Может быть, есть смысл посмотреть в сторону других опций типа Reducing Database Size by Using Vardecimal Storage Format или даже следующих версий СУБД (SQL SERVER 2008, data compression)
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: Zabr (1), Logger (2). |
14.08.2009, 16:28 | #12 |
Участник
|
Inventsettlement самая большая по числу записей, а Custinvoicetrans - по занимаемому месту в базе. Это специфика сетевой розницы.
Цитата:
Сообщение от Vadik
Очистка, которую Вы хотите сделать, связана с незначительной, но все же потерей данных. Если есть уверенность в том, что потребность перепечатать все накладые клиенту за прошлые периоды не возникнет и пара сэкономленных гигабайт важны - почему бы и нет?
Может быть, есть смысл посмотреть в сторону других опций типа Reducing Database Size by Using Vardecimal Storage Format или даже следующих версий СУБД (SQL SERVER 2008, data compression) |
|
14.08.2009, 16:32 | #13 |
Участник
|
|
|
14.08.2009, 16:54 | #14 |
Участник
|
|
|
14.08.2009, 17:26 | #15 |
Участник
|
Цитата:
Фича хорошая. И не только в качестве меры борьбы с размером базы. Реально уменьшает нагрузку на дисковую подсистему, но увеличивает нагрузку на процессор (не особо критично - до 20% в зависимости от данных), ибо распаковка происходит уже в памяти! Но поскольку сейчас век многоядренных процов, то ИМХО (да и сточки зреня разработчиков СУБД) нето не сильно сказывается на общей нагрузке процессора. На Оракле есть доже и по-моему давно. Единственное что - для 2005 я бы не стал, наверное, использовать ибо работает только на Enterprise редакции, и на Standart уже не развернешь базу! А в 2008 ИМХО круче поюзать PAGE компрессию. ps Вот интересная статейка - http://www.oszone.net/print/6832/ |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
14.08.2009, 17:59 | #16 |
Участник
|
Почистил указанные поля в CustInvoiceTrans за 4 месяца прошлого года, это примерно 30% этой таблицы. Очистилось 358 млн.знаков, т.е. около 700 Мб. Как и ожидал, уменьшения размера таблицы MS SQL Management Studio не показал. Посмотрим, даст ли что-то дефрагментация.
|
|
14.08.2009, 18:03 | #17 |
Участник
|
после удаления она значительно уменьшит занимаемый объем.
|
|
14.08.2009, 18:26 | #18 |
Модератор
|
Пользуюсь
Цитата:
Каких побочных явлений стоит ждать?
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
15.08.2009, 18:24 | #19 |
Участник
|
Цитата:
Сообщение от Vadik
Может быть, есть смысл посмотреть в сторону других опций типа Reducing Database Size by Using Vardecimal Storage Format или даже следующих версий СУБД (SQL SERVER 2008, data compression)
|
|
16.08.2009, 22:02 | #20 |
AX*****
|
Цитата:
Сообщение от mazzy
По фактически занимаемому для строк, выравнянных влево.
http://axapta.mazzy.ru/lib/adjustment/ зы Я не в наезд.. просто программисты разные бывают.
__________________
О, как беден, как груб наш русский язык! [c] А.С.Пушкин |
|
Теги |
ax4.0, custinvoicetrans, база данных, как правильно, полезное, сжатие, сжатие базы, чистка |
|
|