Soundex хорош для фонетических соответствий, но работает лучше всего с именами народов (он был первоначально разработан для данных переписи)
Также Полнотекстовое индексирование выезда, синтаксис отличается от логики Google, но это очень быстро и может иметь дело с подобными элементами языка.
Чтобы продлить тайм-аут, который по умолчанию до 10 минут максимум, если не указано иное, необходимо обновить C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ Machine.config в целевой системе (см. C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG, если вы используете 64-разрядную версию). Добавьте это как последний элемент прямо под корневым уровнем:
<system.transactions>
<machineSettings maxTimeout="23:00:00"/>
</system.transactions>
Это (в качестве примера) установит тайм-аут на 23 часа.
Действующее значение отображается в System.Transactions.TransactionManager.MaximumTimeout
Может быть, время ожидания SqlConnection истекло, а не распределенная транзакция?
Вы можете использовать SQL Server Profiler , чтобы попробовать и следить за неожиданным разрывом соединения. Вам просто нужно убедиться, что ваш профиль трассировки включает только те события, которые вам нужно отслеживать, поскольку его вывод может быть довольно подробным. Я бы начал с мониторинга только событий «Аудит входа в систему» и «Аудит выхода из системы», которые можно найти в категории событий «Аудит безопасности».
Если вы профилируете что-либо, кроме автономного / используемого только вами экземпляра SQL Server, вы, вероятно, захотите применить фильтр, чтобы в выходных данных отображались только события, исходящие от вашего хоста.
Возможно, вы захотите явно указать значение тайм-аута в строке подключения - установите его очень низким и посмотрите, получите ли вы такое же поведение намного быстрее.
Из вашего журнала трассировки я вижу два исключения, подробности которых:
Поиск в Google для исключения 1222 обнаружен http://www.sqlservercentral.com/Forums/Topic579864-146-1.aspx#bm645422 , в котором говорится:
Эта ошибка означает, что замок был запрошено в msdb и истекло время ожидания. Обычно это означает, что это большая транзакция на большом временном столе или большой сорт или что-то в этом роде.
У вас есть какие-нибудь особо длительные запросы, которые могут быть связано с этим? Возможно тяжелое отчет о дежурстве или что-то подобное это?
Надеюсь, это поможет вам продвинуться дальше.
maxMemory ()
возвращает максимальный объем памяти, который будет использоваться Java. Так что это не даст тебе того, чего ты хочешь. totalMemory ()
- это то, что вы ищете. См. документы
Если имеется одно условие для подсчета (), то запрос может сканировать самый узкий индекс, охватывающий подсчет. Даже если это полное сканирование, количество прочитанных страниц значительно меньше, чем у кластерного сканирования индекса, что, вероятно, намного шире. При наличии нескольких условий строки-кандидаты должны быть объединены, и план запроса может отказаться от некластеризованного сканирования индекса (или сканирования диапазона) и перейти к полному сканированию таблицы.
В вашем случае вероятнее всего произойдет следующее:
[Дата] > = '8/1/2009'
удовлетворяется индексом, содержащим Date, скорее всего индексом ON Date, поэтому его быстрое сканирование диапазона [Застежка -молния] В (Выберите ZipCode из dbo. ZipCodForRadius ('30348', 150))
совпадает с датой. Даже если у вас нет индекса в застежка -молния, вероятно, у вас есть индекс, содержащий застежка -молния. FreeText ([Описание], «Список ключевых слов здесь»)
полнотекстовый поиск количества, продолжающийся через внутренние индексы FT, быстрый.
Все три условия. Теперь становится беспорядочно. Если у вас достаточно оперативной памяти, запрос может сначала составить план для поиска FT, затем HASH-JOIN, затем Zip scan, а затем HASH-JOIN Date. Это будет быстро, порядка 3 + 3 + 8 секунд + изменение (для хеш-операции). Но если у вас недостаточно ОЗУ или если оптимизатор не любит делать хеш-соединение, он должен будет выполнить поиск FT, затем вложенный цикл поиска застежка -молния, а затем вложенный цикл поиска Code и он может достичь индекс переломного пункта в своих решениях. Так что, скорее всего, вы получите сканирование стола. Это, конечно, спекуляция с моей стороны, но ведь вы разместили только текст T-SQL и нулевую информацию о структуре ваших кластеризованных и некластеризованных индексов.
В конце концов вы должны помнить, что SQL не является вашим C-образным процедурным языком. Речь о производительности в SQL никогда не идет о сравнениях и булевой логике. Речь всегда идет о доступе к данным и количестве прочитанных страниц. Таким образом, даже если каждое отдельное условие может быть удовлетворено небольшим, быстрым сканированием диапазона индексов узкого некластеризованного индекса или индекса FT, комбинация не может (или в его случае оптимизатор запросов не нашел способ).
-121--1728959-Это, вероятно, очевидно для всех читающих, кроме меня, но я просто застрял в этом вопросе и хотел упомянуть, как я его исправил. Несмотря на то, что я изменил файл в месте, указанном BlureMonkMN, я все еще получал время ожидания транзакции по умолчанию в 10 минут. Поскольку я использую Windows 7 64 Bit, файл machine.config для .NET находится в следующем расположении:
C :\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG
Обратите внимание, что папка «Framework64» отличается от указанной выше.