Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重构PHP以帮助提高SQL Server速度?_Php_Sql Server - Fatal编程技术网

如何重构PHP以帮助提高SQL Server速度?

如何重构PHP以帮助提高SQL Server速度?,php,sql-server,Php,Sql Server,我的任务是为我们的PHP web应用程序遇到的一些性能问题找到一个解决方案(基本上,当将高流量用户与高峰流量/负载时间结合在一起时,我们正达到一个“失败”点)。到目前为止,我发现在尝试访问MS SQL Server数据库时出现了瓶颈。我们的系统管理员建议,这可能是由于SQL Server必须进行太多的上下文切换,因为代码查询数据库的量很大 不过,在深入研究了上下文切换以及如何减少上下文切换之后,我只找到了在应用程序代码级别实际如何进行切换的模糊提及,主要是按照“重构代码,使其不会进行太多调用”或

我的任务是为我们的PHP web应用程序遇到的一些性能问题找到一个解决方案(基本上,当将高流量用户与高峰流量/负载时间结合在一起时,我们正达到一个“失败”点)。到目前为止,我发现在尝试访问MS SQL Server数据库时出现了瓶颈。我们的系统管理员建议,这可能是由于SQL Server必须进行太多的上下文切换,因为代码查询数据库的量很大

不过,在深入研究了上下文切换以及如何减少上下文切换之后,我只找到了在应用程序代码级别实际如何进行切换的模糊提及,主要是按照“重构代码,使其不会进行太多调用”或.Net特定提示的思路

我们处理的是一个庞大而复杂的代码库,所以我们不能完全重写系统,而且我们还可以很好地优化(尽我们所能)单个查询,那么我们还可以寻找哪些重构机会来帮助我们的代码不致使数据库服务器崩溃呢

我目前不知道我们的数据库服务器的完整统计数据,但它足够强大,可以运行MSSQLServer2008,而且直到最近都做得很好

埃塔:我只是一个开发人员,没有任何权威性的权力,所以我不能做像聘请顾问这样的事情。虽然我愿意向我的上司提出建议,但我主要是在寻找我们可以在内部做的事情,以进一步解决根本问题

正如我在评论中所解释的,我理解上下文切换更多的是其他事情的症状,而这正是导致我们实际看到的问题的原因(数据库响应缓慢;就像在操作系统中一样,进行大量交换会导致应用程序响应缓慢,但这本身就是其他事情占用太多RAM的症状)。是什么导致了上下文切换?应用程序代码中的大量数据库访问。问题是,正如我们的监控软件所示,单个查询已经达到了我们现在所能达到的程度,那么我们还能做些什么来帮助解决此问题


我的管理员对上下文切换的使用已经得到了澄清。根据他的澄清,问题似乎是有很多相对较小的调用正在进行,这将要求数据库服务器在依次处理每个调用时将它们排队,从而在脚本等待其请求的数据时加快响应时间。是否有那么,有什么策略可以组合这些数据库调用,或者调整MVC结构的PHP应用程序调用数据库的方式,从而使脚本不会一直等待数据库?

如果SQL Server出现性能问题,请将其作为SQL Server性能故障排除来解决。有一些众所周知的方法SQL Server是各种文章、工具、方法和指标的完美综合体,可供您使用,以确定瓶颈

说问题是“上下文切换”是没有信息、没有帮助和不可操作的。作为记录,在SQL Server故障排除中甚至没有“上下文切换”这样的概念,因为它的工作方式非常具体。SQL Server性能故障排除不是这样做的,它甚至不接近真正的根本原因分析sis。在尝试解决问题之前,您需要确定问题。如果您的管理员无法帮助您,请向合格的顾问寻求专业帮助

是的,根据定义,如果你能缓存客户端中的任何内容并避免查询服务器,那就永远是好的。如果客户端和代理能够缓存页面,甚至避免访问HTTP服务器,那就更好了。对于任何技术堆栈来说,这都是正确的

有很多相对较小的电话,这将 要求数据库服务器在处理中的每个数据时将它们排队 反过来,在脚本等待响应时加快响应时间 请求的数据。那么,有什么策略来组合这些数据吗 数据库调用

没有银弹。考虑一下,一个经过优化的数据库可以驱动<强> >很多/强>每秒小请求(数千个/秒)的W/O问题。


这些都是很有趣的指标,可以告诉您应该将精力集中在哪里。

您是否考虑过使用缓存技术,这样您就不会在每次发出请求时都从数据库中读取数据?如果内容没有那么频繁地更改,那么您可以通过这种方式大幅减少SQL请求的数量。@Dameo-不幸的是,我敢肯定,由于应用程序的性质,很多数据确实发生了很大的变化。我必须与管理员核实一下,但我认为它已经在缓存它所能缓存的数据了。很多真正主要的慢化发生在无法真正缓存的事情上,例如搜索(通常通过AJAX调用完成),但当他们必须从数据库中刷新内容时,会开始影响其他领域。上下文切换是SQL Server中的一个概念(因此,在故障排除中是“这样一个概念”,即使是间接的),但这是一种症状,然后会导致其他问题。例如,进行大量简单查询会增加每秒SQL Server上下文切换的次数,而这样做通常会减慢所有操作的速度。然后,问题就变成了,如果单个查询现在已尽可能优化,开发团队还能做些什么除了一般的“查看您的监控软件”之外,您是否还想帮助解决性能问题?SQL Server是一种协作多任务用户模式,它实际上不进行“上下文切换”。SQL Server工作线程有意产生,大量简单查询导致挂起的任务增加,而不是线程内容