Мой PHP/MS Sql Server 2005/win 2003 Приложение иногда становится очень невосприимчивым, использование памяти/процессора не скапливается. Если я попытаюсь открыть любое новое соединение из студии управления sql, тогда он просто зависает в диалоговом окне открытого соединения. как удешевить общее количество активных соединений ms sql server 2005
Как определить общее количество открытых/активных подключений в ms sql server 2005
Ответ 1
Показывает количество подключений на каждый БД:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
И это дает общее количество:
SELECT
COUNT(dbid) as TotalConnections
FROM
sys.sysprocesses
WHERE
dbid > 0
Если вам нужна более подробная информация, запустите:
sp_who2 'Active'
Примечание. Для используемой учетной записи SQL Server нужна роль "sysadmin" (в противном случае она будет показывать только одну строку и число 1 в качестве результата)
Ответ 2
Как упоминалось в @jwalkerjr, вы должны утилизировать соединения в коде (если пул соединений включен, они просто возвращаются в пул соединений). Предписанный способ сделать это - использовать оператор using
:
// Execute stored proc to read data from repository
using (SqlConnection conn = new SqlConnection(this.connectionString))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "LoadFromRepository";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ID", fileID);
conn.Open();
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
if (rdr.Read())
{
filename = SaveToFileSystem(rdr, folderfilepath);
}
}
}
}
Ответ 3
Я знаю, что это старо, но подумал, что было бы неплохо обновить. Если требуется точный подсчет, то, вероятно, также следует отфильтровать также идентификатор столбца ECID. SPID с параллельными потоками может отображаться несколько раз в sysprocesses, а фильтрация ECID = 0 возвращает основной поток для каждого SPID.
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses with (nolock)
WHERE
dbid > 0
and ecid=0
GROUP BY
dbid, loginame
Ответ 4
Используйте это, чтобы получить точный счет для каждого пула соединений (при условии, что каждый процесс пользователя/хоста использует ту же строку соединения)
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName, hostname, hostprocess
FROM
sys.sysprocesses with (nolock)
WHERE
dbid > 0
GROUP BY
dbid, loginame, hostname, hostprocess
Ответ 5
Если ваше приложение PHP закрывает многие подключения SQL Server, то, как вы знаете, у вас есть проблема с кодом вашей базы данных приложения. Это должно быть освобождение/удаление этих соединений после использования и использование пула соединений. Взгляните сюда на достойную статью по теме...
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
Ответ 6
см. sp_who, это дает вам больше деталей, чем просто просмотр количества подключений
в вашем случае я бы сделал что-то вроде этого
DECLARE @temp TABLE(spid int , ecid int, status varchar(50),
loginname varchar(50),
hostname varchar(50),
blk varchar(50), dbname varchar(50), cmd varchar(50), request_id int)
INSERT INTO @temp
EXEC sp_who
SELECT COUNT(*) FROM @temp WHERE dbname = 'DB NAME'
Ответ 7
Основанный на знаниях MS SQL - Как узнать, как открывать соединения и базы данных SQL на каком хосте.
Используя нижеприведенный запрос, вы найдете базу данных списка, имя хоста и общее количество открытых подключений, на основе чего у вас будет идея, какой хост занимает SQL-соединение.
SELECT DB_NAME(dbid) as DBName, hostname ,COUNT(dbid) as NumberOfConnections
FROM sys.sysprocesses with (nolock)
WHERE dbid > 0
and len(hostname) > 0
--and DB_NAME(dbid)='master' /* Open this line to filter Database by Name */
Group by DB_NAME(dbid),hostname
order by DBName
Ответ 8
Я использую sqldbx mydatabase имя безопасность, я хочу знать, сколько людей подключено к безопасности, пожалуйста, пришлите мне запрос ,. уже выполните вышеуказанные запросы, но это показывает, что таблица не существует.
Пожалуйста, пришлите мне запрос