Как сохранить журналы веб -сервера в «n 'Days of Web Server в SQL Server?

dba.stackexchange https://dba.stackexchange.com/questions/2109

Вопрос

Для более быстрых отчетов и анализа производительности мы хотим вставить наши журналы веб -сервера в SQL Server. Это позволит нам увидеть шаблоны трафика, проблемы, замедление в режиме реального времени.

У нас есть демон, который прослушивает события запроса/ответа из нашего балансировщика нагрузки и объемные вставки в базу данных.

Тем не менее, мы получаем около 1 ГБ бревна в день, и нам нужно оставить только неделю (по крайней мере, в этой необработанной форме).

Как лучше всего сохранить эти данные и лучший способ удалить старые записи?

Мы говорили о хранении данных каждого дня в его собственной таблице, например, Log_2011_04_07 Было бы иметь все записи на этот день, а затем сбросить самый старый стол. Вид может быть создан, чтобы охватить все дневные столы для легкого запроса. Это возможно?

Это было полезно?

Решение

Вы должны заглянуть на раздела.

http://technet.microsoft.com/en-us/library/dd578580%28SQL.100%29.aspx

Крутая вещь о разделении состоит в том, что у вас есть только одно имя таблицы (в отличие от подхода с несколькими таблицами), поэтому ваши операторы вставки остаются статичными. Это работает с каждым приложением - это полностью прозрачно для запросов. Вам не нужно беспокоиться о том, что произойдет, если вы получите разные индексы или статистику на каждом из таблиц.

Вы создаете функцию разделения, которая решает, как разбить таблицу на несколько таблиц за сценой. Функция может принимать только один входной параметр/поле, и в вашем случае это будет поле даты. Функция может разорвать таблицу по дате, неделе, месяцу или году - в вашем случае вы хотите дату, 24 -часовой период.

Затем создайте задание агента SQL Server, которая использует T-SQL, чтобы обмениваться последним разделом каждый день. Удаление становится операцией метаданных, и он быстро сверкает. Поменяйте раздел, затем выбросьте старого.

Другие советы

Мы разработали продукт Webstatatistic Logging 6 лет назад, который позволяет нам отслеживать каждый клик посещения пользователей.

То, что мы делали, было для записи Buld каждый визит, как вы писали, и у запланированного демон -проведения журналов и нормализовать данные для дальнейшего поиска позже. Как только данные/запись были проанализированы, они были удалены, чтобы сохранить структуру данных низким.

Для нашей следующей версии продукта мы будем отдельно распределять объемные коллекторы на веб-сайтах, а затем используем демон для сбора данных и потом очиститься, выпустив команды для объема обслуживания.

Таким образом, мы можем справиться с «запланированным обслуживанием», не теряя данных.

Что касается проблемы очистки на центральном сервере, наш текущий план состоит в том, чтобы добавить «метки времени», чтобы иметь возможность архивировать данные после, например. 3 месяца.

Мы думали, что это так же, как текстуры MIP-карты в 3D-играх/рендеринг. Чем ближе вы приближаетесь, тем более подробные данные, тем дальше, тем более «сгруппировано» и менее подробно.

Таким образом, повседневно мы можем наблюдать закономерности посетителей, но через 3 месяца эти данные действительно не имеют отношения к нему, и мы сжимаем данные в меньшее количество деталей.

Мы не решили, разбим ли мы базу данных на куски, чтобы это сохранило отдельный PR. база данных. Но мы могли бы просто, так как есть некоторые проблемы с названием, если мы храним разные уровни в той же базе данных.

Надеюсь, вы можете использовать это для чего -то? Я не могу предоставить вам пример кода как часть продукта нашей компании.

Создайте другую таблицу Daily_tables с двумя столбцами: table_name и date_table_created. В вашем коде, который создает новую ежедневную таблицу (которая загружает веб -журналы), добавьте еще одну запись, чтобы заполнить таблицу Daily_tables с именем созданной таблицы, и TimeStamp (текущая дата времени). Создайте задание агента SQL, которая будет запускать сценарий TSQL каждую неделю. TSQL должен отбрасывать все имена таблиц (table_name) из Daily_tables с временной меткой date_table_created, которая старше за 7 дней.

Надеюсь, это то, что вы искали :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top