使用连接池的ADO.NET中出现超时错误
我们有传统肥皂ASP.NET WebService,该WebService连接到SQL Server数据库以检索结果集.以下是我们的连接字符串: connectionString="server=ServerName;database=UserDBName;user id=UserNameRef;Password=myPassword; 我们的命令超时设置为5分钟.我们看到的是,我们的SQL Server 2012数据库中有连接池的频繁超时问题错误.服务器中没有进行重大活动或阻止问题发生. PFB快照来自sp_whoisactive跟踪.如果看到的话,会议52在5分钟后会耗尽.我们在本节中没有运行任何命令.不知道,为什么它突然变得更加明智. 如何解决这些超时错误? +---------+------------+-----------+----------+---------------------------+-------------+---------
6 2024-04-26
编程技术问答社区
.NET SQL Server连接问题-可能与连接池有关
我有一个非常奇怪的问题,希望那里有人有类似的经历. 我的公司应用程序的应用程序在我们应用程序开始时从SQL Server中"禁止".行为很奇怪.我会以点形式写出. 创建了 SQL连接,检索数据,连接已关闭,与另一个数据源交谈,然后拒绝访问SQL Server. 这是长时间的版本: .NET应用程序多次连接到数据库.获取一些数据,做一些工作.然后,它可以获取更多数据,然后获得"无法找到SQL Server或拒绝访问"的错误.如果在不重新启动应用程序的情况下再次重新启动该过程,则无法与SQL Server建立更多连接.所有新连接结果都在"找不到SQL Server或拒绝访问"中.如果该应用程序重新启动,则将重复上述过程. 这是我在该软件经验中遇到此问题的第一个.该应用程序确实在Delphi 7中编写了代码.DEPHI7/VBA代码没有问题.执行实际查询的我的.NET代码看起来像: protected abstract DbConnection GetCon
0 2024-04-25
编程技术问答社区
检测无法使用的池状SqlConnections
当我尝试使用 sp_setapprole "> sp_setapprole 有时在Windows事件日志中会出现以下错误... 该连接之所以删除,是因为打开其的主体随后假设了新的安全环境,然后试图在其假名的安全环境下重置连接.不支持这种情况.在线书籍中请参见"模仿概述".) ...并在我的应用程序中抛出了一个匹配的例外. 这些是汇总的连接,并且有一段时间连接池与应用程序角色不相容 - 实际上,Microsoft的旧建议是禁用连接池池(!!),但是随着 sp_unsetapprole 现在(从理论上)可以在将连接返回池之前清洁连接. 我相信,当(由于未知的原因)SP_UNSETAPPROLE在关闭并返回连接池之前,没有在连接之前运行SP_UNSETAPPROLE时发生这些错误.然后,当从池返回此连接时,SP_APPROLE注定要失败. 我可以捕获并处理此例外,但是我更喜欢检测即将发生的故障并避免完全例外(以及事件日志中的消息). 是否可以在不引起例外的情
4 2024-04-24
编程技术问答社区
.NET的Oracle管理的数据访问连接池不工作或缓慢
我最近注意到,当我们的应用程序对Oracle数据库进行SQL查询时,它总是至少需要200毫秒才能执行.查询有多简单或复杂都没关系,最小时间约为200 ms.我们正在使用Oracle托管数据访问驱动程序的Oracle 11G. 然后,我创建了一个简单的控制台应用程序来测试连接.我注意到,如果我像下面的示例一样创建连接,那么每个cmd.ExecuteReader方法都需要额外的200 ms(打开连接)? using (OracleConnection con = new OracleConnection(connStr)) { con.Open(); OracleCommand cmd = con.CreateCommand(); ... } 创建这样的连接时,连接状态总是Closed(如果连接被汇总,是否应该打开?). 如果我在程序开始时打开连接,然后将
10 2024-04-23
编程技术问答社区
池中的连接数用完了
我有一个Web表单应用程序,该应用程序将在GridView中显示记录列表,并且通过检查多个复选框可以删除记录.代码本身很简单: protected void btnDelete_Click(object sender, EventArgs e) { int i = 0; try { foreach (GridViewRow row in GridView1.Rows) { CheckBox cb = (CheckBox)row.FindControl("ID"); if (cb != null && cb.Checked) { int profileID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value); Profile pro
2 2024-04-23
编程技术问答社区
连接池 - 一个进程 - 许多线程
我对连接池的理解是;如果ConnectionsTring完全相同,则我们重复使用连接而不是建立新连接. 我的问题是我正在创建许多用于并行处理的线程.在此"虚拟"程序中,我创建500个线程,然后让ThreadPool函数处理线程. 步骤是: 每个线程在SQL中制作一个更新表. (说明更新的时间戳) 然后螺纹在1到10秒之间的睡眠(随机). 最后,线程在SQL中进行了另一个更新(在结束时间表示时间戳) 然后线程出口 class Program { static void Main(string[] args) { int numberOfThreads = 150; ThreadPool.SetMinThreads(numberOfThreads, numberOfThreads); ThreadPool.SetMaxThreads(numberOfThreads, numberOfT
连接池的速度比保持一个连接开放要慢
我已经观察到在我们创建的客户端应用程序中连接池的性能的有趣行为.当用户单击对象时,从数据库加载了更多对象的数据.根据对象的不同,这需要每次点击10到30个查询. 这是通过使用连接池进行的,每个查询都在池的新连接上派发,并且在查询运行后关闭连接. 我已经分析了Profiler中的查询以进行性能优化,并看到许多审核登录/注销条目.此外,尽管在运行良好的情况下查询自己(只有索引/扫描操作员). 只是为了尝试一下,我禁用了池并修改了代码以保持每个客户端应用程序并重复使用它.这使整个应用程序都更加响应,并且所有审核登录/注销条目都从Profiler中消失了. 这怎么可能?连接是否应该保持打开状态,或者如果它们实际上保持开放至少不这么慢?我们是否有可能使用SQLConnection类错误,导致禁用池? 我已经阅读了有关合并的其他帖子,但没有发现有关池连接和重复使用相同连接之间可感知速度差异的任何信息. SqlConnection con = new SqlConn
0 2024-04-21
编程技术问答社区
我怎样才能在异常发生之前检测到导致异常的条件?
我没有这个问题可能证明问题的可能测试案例. 在下面的代码中,是否可以在尝试使用之前检测连接是无法使用的吗? SqlConnection c = new SqlConnection(myConnString); c.Open(); // creates pool setAppRole(c); // OK c.Close(); // returns connection to pool c = new SqlConnection(myConnString); // gets connection from pool c.Open(); // ok... but wait for it... // ??? How to detect KABOOM before it happens? setAppRole(c); // KABOOM kaboom在Windows事件日志中表现为错误; 该连接
6 2024-04-20
编程技术问答社区
在ASP.NET Core 3.1中用多个连接字符串DI NpgsqlConnection postgreSQL的正确方法
我正在努力注册DI NpgsqlConnection(),并在ASP.NET Core 3.1,Dapper v2.0.78&Postgres v11中使用多个连接字符串. 我将提供当前状态并修复以下代码: 当前状态 这个想法来自在这里 步骤1 . Startup.cs --> ConfigureServices() services.AddTransient(sp => { var connectionDict = new Dictionary { { DatabaseConnectionName.Cnn1, "Connectionstring 1"}, { DatabaseConnectionName.Cnn2, "Connectionstring 2"} };
4 2024-04-19
编程技术问答社区
C#, Dapper, SQL Server和连接池
我已经编写了一些代码将一些数据写入SQL Server,并使用DAPPER.在继续其他工作之前,我不需要等待写入才能完成,因此要使用task.run()使此异步. 我有(使用的)语句在我的其余系统中调用此语句: using (IDataAccess ida = new DAL()) { ida.WriteMessageToDB(id, routingKey, msgBody); } 我的dal将自动检查dbConnection.state.当使用使用语句时,如果关闭使用语句,并尝试一个简单的修复程序.对于任何非Async/tpl Select调用. 都可以正常工作. 但是,当我同时投入大量写作时,任务.run()代码在其中一些关闭时掉落了 - 我认为代码的平行性质意味着状态是被其他任务关闭. i修复了此操作,通过进行检查以打开Connection.State.喜欢: Task.Run(() =>
4 2024-04-19
编程技术问答社区
多租户: 每个租户有独立的数据库
我们正在开发多租户应用程序.关于体系结构,我们为业务逻辑设计了共享的中间层,每个租户一个数据库都为数据持久性设计了.话虽如此,业务层将与每个租户的数据库服务器建立一组连接(连接池).这意味着应用程序为每个租户保持单独的连接池.如果我们期望大约5000名租户,那么该解决方案需要高度资源利用率(每位租户的应用程序服务器和数据库服务器之间的连接),这会导致性能问题. 我们通过保留共同的连接池解决了这一点.为了在不同的数据库中维护单个连接池,我们创建了一个名为" App-Master"的新数据库.现在,我们始终首先连接到"应用程序管理员"数据库,然后将数据库更改为特定于租户的数据库.解决了我们的连接池问题. 此解决方案与本地数据库服务器非常有效.但是它不适用于Azure SQL,因为它不支持更改数据库. 事先感谢您建议如何维护连接池或更好的方法/最佳实践,以应对这种多租户方案. 解决方案 我之前已经看到了带有单独数据库的多个租赁方案.有两个重叠的问题;每位租户的网络服务
0 2024-04-18
编程技术问答社区
C#中的SQLConnection池大小和活动连接数
在C#中,可以使用" boming = true"和" max pool size = xy"在连接字符串中启用/禁用连接池. 喜欢:是SQL连接字符串中"最大池大小"的最大允许值 是否可以询问与SQL Server处于活动状态有多少个连接?当前池大小在编程中是多少? 解决方案 您可以使用 numberOfactiveConnections 或 numberofpooledConnections ado.net performance counter: /en-us/dotnet/framework/data/adonet/performance-counters
12 2024-04-18
编程技术问答社区
活动的Azure Sql连接超过了连接池的限制
当我们的Azure SQL数据库性能偶尔会大大降低时,我们会与生产问题作斗争.我们知道我们的一张桌子上有锁,但是这些锁不是僵局,它们是长锁,并且在一个小时左右的时间内,性能恢复正常.我们正在尝试找到有关如何获得这些长锁的所有可能场景(每个查询都非常快速,所有性能分析仪都可以向我们展示导致长锁的原因).此问题的原因是下图: OUT连接池设置仅允许汇总200个连接.在大多数情况下,我们与数据库有大约10-20个打开/合并的连接.然后,突然有许多主动连接开始增长,并且池被完全摄入.虽然许多合并连接保持在200以下,但我们看到了许多有效连接使用sp_who2达到1.5k-2k连接(有时为4K-5K). 我已经使用Azure门户监视工具构建了相同的图表.它有不同的聚合期,但显示了相同的问题: 我们使用的连接字符串: 数据源= [server] .database.windows.net;初始 目录= [数据库]; persist Security Info = true;用
0 2024-04-18
编程技术问答社区
SQL SERVER(Express)中的连接池--推荐量?
是否建议通过我使用的每个应用程序与连接池一起使用. 我有5个应用程序运行,它们没有被密集使用,所有连接均已打开和关闭. 所以我考虑将每个应用程序设置为min pool = 5 所以这个5 x 5 = 25 SQL Express可以处理25个连接...实际上每个池5池和5个连接? 我可以去十个吗?是否有必要将Max Pool属性放在连接字符串中,以确保我不会浏览每个池的数字? 任何帮助都非常感谢 解决方案 连接数的数量无关紧要.您可以在默认的100处让连接池大小. 重要的是请求的数量. SQL Express的局限性之一是它仅运行一个表达的第二个重要限制是1 GB Max 正如您在SQL Express所看到的那样,您无法达到的硬限制,并且它停止工作,只是在其分配的硬件资源中受到限制,结果是总体吞吐量有限.当您接近该吞吐量限制时,性能开始降低. 在较旧版本的MSDE上,查询限制为5个并发请求,在第6个请求下,MSDE引擎将人为地放慢自身
2 2024-04-17
编程技术问答社区
在现有的SqlConnection中打开一个DbContext连接
如果在现有ado.net SqlConnection中打开实体框架的DbContext连接,我有兴趣,只要它们都使用相同的连接字符串,即在完全相同的数据库上操作? 例如: using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(0, 30, 0))) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); DoStuffWithEF(connectionString); ... } } void DoStuffWithEF(string connectionString) { using (var context
8 2024-04-16
编程技术问答社区
SqlConnection与Sql Session。它们的生命期是否重合?
我想在我的c# app. 例如,我想将某些背景过程设置为LOW. 问题是: 如果我打开了一个新的SQL连接,是否启动了新的SQL-Session? SQL-Session会直到连接关闭?如果我在打开SqlConnection之后立即应用我的设置,则它们对在相同SqlConnection的上下文中执行的所有查询有效吗? 连接合并呢?我的SET DEADLOCK_PRIORITY LOW设置可能会被我的系统中的其他过程重复使用(我不想),因为SqlConnection实际上并未关闭( asp.net连接池ploming 决定重复使用). 谢谢! 解决方案 ado.net执行sp_reset_connection当您从池中取A SqlConnection时(关闭它后,以返回池).根据 sql Server中的" exec sp_reset_connection"是什么? profiler?所有SET正在重置所有选项.那将包括DEADLOCK_PRIORI
4 2024-04-14
编程技术问答社区
sql连接字符串中 "最大池大小 "的最大允许值是什么?
连接字符串中"最大池大小"的最大允许值是多少? 假设这是我在app.config 中的连接字符串 我可以使用什么最大值而不是1024?请记住,它是最大值,而不是默认值. 解决方案 最大池大小没有记录的限制.但是,与单个SQL Server的最大连接数量有一个准确的记录限制(每个实例32767,请参见 http://msdn.microsoft.com/en-us/library/ms143432(v = sql.90
0 2024-04-14
编程技术问答社区
重复使用SqlConnection的最佳实践
我来自Java的经验,并且正在尝试从C#开始.我已经阅读了 sqlConnection sqlconnection sqlcompompompome sqlcommand sqldatareader sqldatareader idisposable iDisposable and an DB在自己的using块中包裹SqlConnection,SqlCommand和SqlDataReader 但是,在Java中,我们用来将连接封装到工厂方法中,仅创建一次,然后将其重复使用以进行所有查询,甚至是多线程.仅为每个查询创建语句和结果集,并尽快关闭. 不是为每个查询有点过分创建新的SqlConnection吗?它不能重复使用吗? 解决方案 创建类的新实例SqlConnection不会创建与SQL Server的新网络连接,而是租赁现有连接(或创建新连接). .NET为您处理物理连接池. 完成连接(可以通过该连接发送多个查询)时,只需Close()或Dispose()(
4 2024-04-14
编程技术问答社区
AWS中跨lambdas的连接池
我们知道lambdas是由执行时间收取的.因此,现在我想从Lambda连接到SQL Server DB.如果我在每个lambda中创建一个连接,则lambda很重. 是否有任何最佳方法可以将我的SQL连接保持在一个地方,并且能够在我的所有lambdas中使用.或至少活着一个lambda进行多次执行. 我知道,Lambdas应该被视为无状态的对待,但我仍在为这个问题提供更好的解决方案.我已经在许多网站上进行了搜索,但没有运气.我在Google中发现的AWS的帮助和参考较少. 解决方案 是的,有一个更好的解决方案. 基本上,您是对的,Lambdas应该被视为无状态. 但是,在AWS lambda中,有容器重用的概念.这意味着,如果您频繁调用lambdas,则很有可能将服务于您先前请求的同一容器用于服务当前请求.如果发生这种情况,那么您将获得以前的执行上下文,其中包括所有声明和数据库连接(处理程序代码除外),如先前的执行. 以下是AWS lambda容器重
0 2024-04-14
编程技术问答社区
HTTP连接池是否可行?
对于联系有限的其他服务器集的C#Web服务,我希望创建我希望与之联系的每个服务器1 HTTP连接池. 当然的基本概念: 每个池都应与其远程网络服务器打开几个连接(3个连接?),并保持这些连接的活力. 应使用最大时间到寿命来回收(断开/重新连接)与远程Web服务器的连接,从而阻止远程Web服务器在我们之前断开连接. 不应同时创建连接,而应在3个连接之间进行一点停顿,以便回收也不同时发生. 如果远程网络服务器仍然出乎意料地断开连接,则应注意,我们应该重新连接. 如果由于某种原因无法重新连接,则应在稍作暂停后进行重试. 这样,当我想发送httpwebrequest时,我有即将使用的连接,避免了我想使用它的连接的时间. 目前,我不知道这是否是httpwebrequest的默认功能.很抱歉,如果我要明显.谷歌搜索此操作只会使我对Java提出类似的问题. 问题1:.net/c#? 中是否存在这样的东西 问题2:如果没有,您知道的互联网上是否有资源? 问
0 2024-04-13
编程技术问答社区