2014-09-15 4 views
0

Я унаследовал базу данных (не все мы просто любим это), и таблица вышла из-под контроля.Эффекты с большими большими эффектами стола

База данных составляет более 50 ГБ. Я сделал дефрагментацию, а также переиндексацию, но это не помогло. Проблема в том, что таблица имеет 236 столбцов и около 23000 строк. И нет, это не опечатка!

Единственное решение, которое я вижу, это разбить стол. Приложение .Net находится в нашей интрасети, и я оптимизировал каждый кусок кода, который он содержит, а также хранимые процедуры.

Таблица содержит информацию, такую ​​как TempHigh, TempLow и TempMed. Высокий, Низкий и Мед повторяются по всему столу для других факторов. Таким образом, каждый High, Low и Med станут собственной таблицей с внешним ключом, указывающим на родительскую таблицу.

Это создаст много СОБЫТИЙ при доступе к данным и их обновлении.

Это единственный способ увидеть, что может решить проблему.

Мой вопрос: не могу ли я лучше решить эту проблему?

Любые предложения приветствуются.

Спасибо !!!

EDIT

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

Спасибо за комментарии. Я постараюсь ответить на ваши вопросы. Во-первых, я скопировал базу данных в мою среду разработки .Net, и она медленная, даже когда я только что зашел в систему. И перенесла приложение .Net на тот же сервер, что и сервер sql, для проверки проблем подключения. Те же проблемы. Это система транзакций (OLTP). Некоторые столбцы я уже переместил в свои собственные таблицы, поскольку они повторяли себя и вместо них новый столбец с внешним ключом (без ограничения). Нет изображений, просто данных.

Вот спецификации таблицы:

TableName SchemaName RowCounts TotalSpaceKB UsedSpaceKB UnusedSpaceKB 
MyTable   dbo  22904  45192   45160  32 
+4

С ** вашими данными ** и ** вашими структурами данных ** внесите изменения в неживую среду и * проверьте * результаты. Настройка производительности через Интернет без доступа к каким-либо данным не работает. –

+2

Каков тип столбцов? Может ли это быть оптимизировано? 23000 * 236 составляет 5428000, 5 428 тысяч точек данных должны хорошо входить в пределах 50 ГБ. – cDima

+0

23000 строк и 50 гб данных? есть ли у вас изображения или столбцы с большим количеством данных? возможно, вы можете сделать вертикальное разбиение на разделы, создать отношения 1: 1 с новыми таблицами и переместить там некоторые из самых тяжелых столбцов. трудно сказать без дополнительных данных – Vland

ответ

3

я с видом лучший способ решить эту проблему?

Да:

  • Профиль приложения (исходный код, а не SQL), чтобы гарантировать, что доступ к БД медленная часть
  • Run SQL прослеживает, чтобы определить наихудший выполнения запросов и работать с хороший администратор базы данных для определения возможных оптимизаций
  • Убедитесь, что все статистические данные являются актуальными (по крайней мере, ежедневно).
  • Не угадывайте - используйте твердые факты для выявления узких мест производительности.
  • Убедитесь, что у вас есть соответствующие индексы для наиболее распространенных запросов.
  • Не предполагайте, что разрушение стола ускорит процесс. Фактически это может сделать вещи медленнее, если вы постоянно присоединяетесь к нескольким таблицам, которые равны 1: 1.

Я видел базы данных, которые терабайт в размере, который до сих пор выполняет хорошо (добавление/uptating тысячи записей в день). Ключ определяет самые медленные операции и добавляет/обновляет индексы для их оптимизации.

+0

Отмечено это как ответ, потому что это может помочь другим. После настройки другого сервера с большим количеством ресурсов проблема сохраняется. Даже с приложением, которое подключается к маленькому столу с примерно 1500 записями. Работает отлично, если вы просматриваете в IIS, но даже на prod-сервере и открываете IE, где-то там торчит бутылка. По крайней мере, я уверен, что это не база данных. –

+0

@ Zath - кажется, что ваша проблема заключается в том, чтобы перевести необработанные данные в вашу модель и/или сделать их на стороне клиента. –

+0

Я нашел проблемную строку кода. IPHostEntry FullEntry = Dns.GetHostEntry (REMOTE_ADDR); При просмотре в IIS с использованием локального хоста загружается отлично. Перейдите в браузер сервера к ip-адресу, он навсегда загружается. По крайней мере, я сузил его дальше. Возможно, DNS-сервер. Пора поставить еще один вопрос здесь после еще нескольких исследований и испытаний ... –

Смежные вопросы