ranio Ответов: 1

Как максимизировать количество одновременных подключений в C#/ IIS/SQL?


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

Если количество вошедших в систему меньше 50, то проблема тайм-аута не возникает.

Я работаю в .net, используя c# . Я загрузил приложение на сервер IIS, и версия выше 7. используемая версия SQL server-2008.

Что я уже пробовал:

<add name="MyConnectionString" connectionString="Data Source=NTP-434;Initial Catalog=TEST;Persist Security Info=True;User ID=sa;Password=password1.;" providerName="System.Data.SqlClient"/>

Logging in Code

Front End
 DataSet Ds = new DataSet();
                DbCommand DbCmd = DataAccessBase.Database.GetStoredProcCommand("CHECK_AUTHENTICATEUSER");
                DataAccessBase.Database.AddInParameter(DbCmd, "@p_LoginID", DbType.String, p_USERID);
                DataAccessBase.Database.AddInParameter(DbCmd, "@p_Password", DbType.String, p_PASSWORD);
                DataAccessBase.Database.AddOutParameter(DbCmd, "@p_error_code", DbType.String, 40);
                DataAccessBase.Database.AddOutParameter(DbCmd, "@p_error_msg", DbType.String, 1000);
                Ds = DataAccessBase.Database.ExecuteDataSet(DbCmd);
                p_error_code = Convert.ToString(DataAccessBase.Database.GetParameterValue(DbCmd, "@p_error_code"));
                p_error_msg = Convert.ToString(DataAccessBase.Database.GetParameterValue(DbCmd, "@p_error_msg"));
                return Ds;

Back End

SELECT UserId        
 , LoginId        
 , Active        
 , Approved        
 , UserName        
 , ROLES.RoleId        
 , ROLECODE        
 , ROLENAME        
 , (ROLECODE + ' [' + ROLENAME + ']') AS USER_ROLE         
 , EmailId        
 , CorporateId        
 , IsPwdReset        
 , SessionID         
 , isnull(MinLimit,0)as MinLimit        
 , isnull(MaxLimit,0)as MaxLimit        
 , isnull(ISLIMIT,'N') as ISLIMIT       
 , isnull(IsDashboard,'N') as ISDASHBOARD    
 -----25-05-2016--CR_REQ-19754----START  
 , isnull(MinLimitOutward,0)as MinLimitOutward        
 , isnull(MaxLimitOutward,0)as MaxLimitOutward        
 , isnull(ISLIMITOUTWARD,'N') as ISLIMITOUTWARD     
 -----25-05-2016--CR_REQ-19754----END    
 FROM Users         
 INNER JOIN ROLES ON USERS.RoleId = ROLES.ROLEID                      
 WHERE LoginId = @p_LoginID AND IsDeleted = 0      

F-ES Sitecore

Вы закрываете соединения после того, как используете их?

ranio

Соединение закрыто.

1 Ответов

Рейтинг:
0

#realJSOP

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

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

РЕДАКТИРОВАТЬ ============

SQL Server автоматически регулирует максимальное количество подключений пользователей по мере необходимости, вплоть до максимально допустимого значения (32767). Зная это, я не думаю, что это имеет какое-либо отношение к количеству соединений. Возможно, ваш сервер не имеет достаточного количества oomph, чтобы эффективно обрабатывать более 50 соединений. Вы можете добавить память (разумный сервер БД имеет не менее 64 ГБ оперативной памяти) и/или увеличить количество ядер в коробке (серверы на моей работе имеют 12 отдельных процессоров).

Проблема не в IIS, потому что вы на самом деле получите ошибку "сервер занят", если превысите количество разрешенных подключений. Проблема (предполагая, что ваше оборудование может справиться с этим) заключается в том, что ваши запросы увязают в ней.

SQL-соединение должно быть открыто только достаточно долго, чтобы получить/сохранить данные, а затем немедленно закрыто. Если вы делаете это, то это возвращается к эффективности ваших запросов и объему данных, с которыми вы работаете.


ranio

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

Увеличиваем ли мы количество одновременных операций IIS или Sql?

#realJSOP

Я изменил свой ответ, чтобы ответить на этот вопрос.