我最近推出了一个白标网站(同一网站的多个版本)。目前还没有大量流量——主要是机器人,但每天可能有 800 名用户。除了位于非 Azure 服务器上的管理面板外,它还托管在 Azure 上,带有 Azure 数据库。两个站点都连接到同一个 Azure 数据库。还有一些工作角色正在运行以处理数据 - 99% 的时间他们什么都不做,但他们会定期检查。
我总是遇到持续几秒钟然后又好了的随机错误,例如:
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
然而,今天早上,我们遇到了一个更严重的问题。它开始于:
System.ComponentModel.Win32Exception: An existing connection was forcibly closed by the remote host
这是在机器人(谷歌、百度、AhrefsBot 和 Wiseguys.nl)为网站编制索引时发生的。我从中得到一个或多个错误。然后我得到:
System.Data.SqlClient.SqlException: The service has encountered an error processing your request. Please try again. Error code 40143. A severe error occurred on the current command. The results, if any, should be discarded.
这是在 ExecuteReader 阶段。
10 分钟后,真正的问题出现了——这意味着没有人可以登录到管理界面,但是当我测试它时,Azure 托管的网站似乎正常,尽管机器人仍然会报错。问题是:
System.ComponentModel.Win32Exception: The wait operation timed out
这继续随机连接工作大约一个小时。然后我遇到了另一个问题:
System.Data.SqlClient.SqlException: Resource ID : 1. The request limit for the database is 180 and has been reached. See 'http://go.microsoft.com/fwlink/?LinkId=267637' for assistance.
这在过去一个小时内断断续续发生 - 主要是针对 worker 角色。然后我试图找出是什么占用了所有这些请求,我发现了这个命令:
SELECT * FROM sys.dm_exec_requests
当我一遍又一遍地运行它时,它只返回 1 或 2 个请求。
所以我的问题是: 1) 是否有其他人经历过与托管在 Azure 上的服务器相对定期(一次,也许一天两次)的暂时断开连接? 2) 上面的事件列表是否表明了一个特定的问题?当许多管理员同时登录时,这一切都可能发生。 3) 收到180 limit 消息时,如何更好地调试对数据库的请求数?
提前致谢。
最佳答案
几年前我写了这个问题,并收到标题的小改动通知。在体验了更多 Azure SQL 数据库之后,我现在知道这个问题的答案了。为了别人的利益,很简单,你的数据库设置的层级太低了。
Azure 的定价层在性能上有很大差异。为了实现这一目标,他们限制了许多性能指标,例如CPU 功率、每分钟请求数等。
这意味着,如果您要超越您的层级,您的请求将开始排队,因为 CPU 功率/请求量太高而无法处理。这会导致超时,然后请求限制会随着请求等待处理而增加。最终,它达到了数据库根本崩溃的地步。
我的经验是,较低的数据库级别(例如 S0 和 S1)确实功能不足,除了开发或非常基本的站点外,不应将其用于其他任何用途。
Azure 门户中有一些很棒的工具,可让您调试数据库的运行情况,例如 CPU 图、索引顾问和查询性能洞察。
关于c# - Azure SQL 数据库连接问题 - 连接太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18655180/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL