我们有一个带有2个实例的coldfusion企业服务器。每个实例在一个MSSQL服务器上有200多个数据源到数据库。这个数字将继续增长。现在看来,即使数据库很小,对单个数据源的请求也会变慢。当CF有更多数据源时,请求可能会变慢?
答案 0 :(得分:2)
当然有可能,我怀疑有很多人有这种经历所以我们可以猜测。
就个人而言,我永远不会在SQL服务器中创建那么多数据库,而且CF中的数据源也很多。使用数据库模式的恕我直言将是更好的解决方案,更容易维护,管理等。
记忆的情况如何?可能会发生大量的JDBC连接阻塞服务器。我首先检查内存消耗,然后检查数据通过输出后的SQL统计信息,甚至可能后来甚至SQL Severs性能设置,CF设置以查看concurent可能的JDBC连接,网络设置等。 再次,只是猜测并试图给你一个提示在哪里看。
答案 1 :(得分:2)
它还不仅仅是冷血。每个连接大约4k,每个数据源可以使用多个连接。因此,200 DSN可能等于300或400个连接(或聚合时为800或1000)。 DB服务器本身使用“tempdb”作为处理请求的工作空间。它扩展了此工作区以处理流量 - 但它在某种程度上是共享资源。因此,一个DB可能会对服务器上的另一个DB产生影响。
我会:
当然,毫无疑问,您的数据库需要经过精心调整才能执行(索引和优化 - 具有良好的架构并通过良好的查询代码支持)。创建可扩展的解决方案需要所有这些东西:)
PS - 不用说你可以联系我获取更多“正式”的帮助。我很乐意和你聊聊你的问题。
答案 2 :(得分:2)
数据源是否因某种原因而被分区(例如,不同的客户/客户等)?如果这只是一个包含大量数据库的大型应用程序,您可以通过单个CF数据源通过跨数据库查询来减少DSN的数量。
如果用于连接SQL Server的帐户CF对服务器上的两个数据库都具有读取权限,则可以执行以下操作:
SELECT field1,field2,field3 ...... FROM [databaseA]。[dbo] .Table1 T1 JOIN [databaseB]。[dbo] .Table2 T2 ON ...
我使用在多个DB之间共享的State和Country表来完成此操作。请仔细设置权限以防止损坏或错误更新。