Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Java 带有附加数据库服务器的大型数据库_Java_Sql Server_Database_Performance_Optimization - Fatal编程技术网

Java 带有附加数据库服务器的大型数据库

Java 带有附加数据库服务器的大型数据库,java,sql-server,database,performance,optimization,Java,Sql Server,Database,Performance,Optimization,我们有一个拥有数百万条记录的大型MS-SQL数据库。有一些java服务与数据库交互以进行数据检索。该应用程序处理许多LIKE、IN和JOIN子句。这导致在java服务的服务调用过程中CPU使用率更高,响应时间更长 根据我们的分析,我们在数据库中识别了4个大表,它们占用了大量的空间。决定是在不同的服务器中再添加一个DB,并分配足够的内存。然后将这4个巨大的表从现有数据库中移动到一个单独的表中 有人能建议这个想法是否有助于数据库优化,充分利用两个数据库或任何其他有用的技术 现有服务器的CPU是否已达

我们有一个拥有数百万条记录的大型MS-SQL数据库。有一些java服务与数据库交互以进行数据检索。该应用程序处理许多LIKE、IN和JOIN子句。这导致在java服务的服务调用过程中CPU使用率更高,响应时间更长

根据我们的分析,我们在数据库中识别了4个大表,它们占用了大量的空间。决定是在不同的服务器中再添加一个DB,并分配足够的内存。然后将这4个巨大的表从现有数据库中移动到一个单独的表中


有人能建议这个想法是否有助于数据库优化,充分利用两个数据库或任何其他有用的技术

现有服务器的CPU是否已达到最大值?通常情况下,CPU不是问题所在,但I/O容量是问题所在(网络、磁盘)。您可以在现有服务器上提供更多的I/O资源,然后在不同的磁盘上分发temp db、tx日志以及可能的四个表

在两台服务器上拆分模式对Java客户端来说是不透明的。此外,如果这些表和模式的其余部分之间存在引用完整性约束,则除非删除这些约束,否则无法执行此操作

一种替代方法是使用TransActional复制将整个架构复制到另一台服务器。您可以将这两个实例放在负载平衡器后面。或者将所有只读进程移动到复制

但复制也有其自身的缺点。例如,架构更改变得更加困难,因为并非所有类型的更改都可以复制。tx复制卡滞是一个需要解决的难题


在开始任何这些之前,请确保您有适当的索引。查看sys.dm_db_missing_index_details可以帮助您解决这一问题。查看以了解如何查询视图。

您可以尝试从sql语句中删除逻辑,并将其放入java服务中。这不是一个非常干净的解决方案,但它会减轻db的一些压力。Hi@Todoy,我们在Hibernate中只有内部连接&LIKE查询。您是否建议将其拆分为多个查询?请让我知道Hi@Ralf谢谢你的建议!我们从微软请来了一位专家,他提取了所有缓慢的查询,并建议我们将所有的LIKE替换为equal to。我们讨论的另一个选项是将特定于应用程序的查询移动到存储过程。你认为这会有帮助吗?如果你能接受结果中潜在的变化,那么当然,如果将你的LIKE操作符改为“=”是有益的。通过这种方式,您将从索引中获得更好的里程数。不过,您应该检查是否有所有相关的索引。存储过程。。。很难说。我想说,如果您a)选择比最终结果更多的数据,并且您的客户在开始他们的业务之前将其压缩,或者b)您的客户计算结果并将其直接写入数据库,而无需自己进一步使用,那么您可以从存储过程中获益。