Я переписал ниже на основе ответов.
У меня есть веб-сайт, который вызывает проблемы ВЫСОКОГО ЦП на сервере базы данных до такой степени, что сервер становится недоступным. Переработка пула приложений устраняет проблему. По словам администратора сервера http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en показывает, что существуют потоки, которые активны около часа.
Взаимодействия с базой данных очень просты и работали до того, как мы добавили в приложение маршрутизацию веб-форм.
Они состоят только из такого кода во всем приложении.
Да, этот код не идеален, но не этот код является проблемой, так как до того, как мы добавили маршрутизацию, проблем не было.
private string GetPublishedParagraphs()
{
string query, paragraphs = "";
try
{
m_sql_connection = new SqlConnection(m_base_page.ConnectionString());
query = "select * from PublishedParagraphs where IDDataContent_page='" + m_IDDataContent_page + "'";
SqlDataAdapter da = new SqlDataAdapter(query, m_sql_connection);
DataSet ds = new DataSet();
da.Fill(ds, "paragraph");
if (ds.Tables["paragraph"].Rows.Count > 0)
paragraphs = (string)ds.Tables["paragraph"].Rows[0]["paragraphs"];
ds.Dispose();
da.Dispose();
}
finally
{
m_sql_connection.Close();
}
paragraphs = paragraphs.Replace("™", "™");
return paragraphs;
}
Строка подключения выглядит следующим образом:
server_name; User ID=server_user; Password=server_password
Мы тщательно проверили, что за каждым вызовом базы данных Open () следует Close ().
Мы измерили, что нет открытых соединений, просматривая их, поскольку мы запускаем приложение локально, и количество соединений не увеличивается с помощью:
SELECT SPID,
STATUS,
PROGRAM_NAME,
LOGINAME=RTRIM(LOGINAME),
HOSTNAME,
CMD
FROM MASTER.DBO.SYSPROCESSES
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0
(Однако, если мы не закроем соединения, есть утечка)
Отличие нашего приложения от того, когда оно работало, заключается в добавлении маршрутизации asp.net через веб-формы. Это также вызывает базу данных, но снова закрывает соединения после того, как они открыты.
Мы не уверены, что еще мы можем проверить.
Есть идеи, коллеги-программисты?
ОТВЕТ
Мы нашли проблему через Query Profiler. Это показало нам запрос с высоким уровнем использования. Возвращение запроса к коду показало бесконечный цикл, вызывающий базу данных снова и снова. Это было трудно найти, так как цикл был инициирован ботом, который вызывал страницу на сайте, которого больше не было.