Почему мой сайт постоянно зависает? - PullRequest
1 голос
/ 28 марта 2009

Это довольно расплывчатый вопрос, и получение ответа на него кажется слишком долгим, но я не знаю, что еще делать.

С тех пор, как я сделал мой сайт живым время от времени, он просто замерзнет. Вы нажимаете на ссылку, и браузер просто будет отображать сайт, похожий на тот, который пытается подключиться. Кажется, что заморозка может длиться до 2 минут или около того, тогда все просто отлично. Потом, немного позже, он сделает то же самое.

Я отслеживаю все исключения, которые происходят на моем веб-сайте, в файле журнала.

Я получаю это совсем немного ..

Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает

И трассировка стека показывает, что это приводит к некоторому методу, который подключается к базе данных.

Я предполагаю, что замораживание связано с этой проблемой тайм-аута. Мой веб-сайт размещен на общем сервере, а моя база данных находится на каком-то другом сервере, на котором также находится около миллиарда других баз данных.

Но даже на общем сервере эта проблема замораживания возникает постоянно. Это очень раздражает. И я вижу, что это довольно катастрофическая проблема, учитывая, что мой сайт основан на электронной коммерции, и люди совершают на нем транзакции. Последнее, что я хочу, - это то, что сайт зависает, когда мои пользователи нажимают кнопку «Отправить платеж», и это приводит к тому, что они снова и снова нажимают кнопку «Отправить платеж», потому что сайт зависает, после чего с кредитной карты взимается около 10 дополнительных раз.

Есть ли у кого-нибудь предложения о том, как лучше всего с этим справиться?

Ответы [ 4 ]

4 голосов
/ 28 марта 2009

Я предполагаю, что это связано с соединениями с базой данных. Проверить, что они выпускаются правильно? Если нет, то он использует их все.

Также проверьте, настроена ли в вашей базе данных пул соединений.

2 голосов
/ 29 марта 2009

Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает

Это исключение тайм-аута команды Sql - оно может быть довольно распространенным, если ваша база данных находится под нагрузкой. Убедитесь, что вы избавляетесь от SqlConnections и SqlCommands - хотя это обычно приводит к исключению тайм-аута пула (не удается получить соединение из пула соединений).

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

Вы можете уменьшить CommandTimeout ваших SqlCommands - я знаю, что это звучит несколько нелогично, но я часто нахожу, что лучше потерпеть неудачу раньше, чем пытаться в течение 60 секунд с дополнительной нагрузкой на сервер. Если ваш .5-секундный запрос не будет выполнен за 5 секунд, скорее всего, он не будет выполнен за 60 секунд.

В качестве альтернативы, если вы относитесь к типу пациента, вы можете увеличить CommandTimeout, но есть также время ожидания IIS 90 секунд, которое вам нужно будет изменить, если вы увеличите его слишком много.

1 голос
/ 29 марта 2009

Проверьте журналы SQL Server, особенно на наличие взаимоблокировок.

Если у вас открыто несколько соединений, возможно, одно ожидает в строке, заблокированной другим.

1 голос
/ 28 марта 2009

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

Насколько серьезна проблема на самом деле, зависит от того, сколько ошибок вы получите. Из твоего описания звучит так, будто ты получаешь слишком много, чтобы быть нормальным.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...