我们有一个拥有数百万条记录的大型MS-SQL数据库。有一些java服务与DB交互以进行数据检索。该应用程序涉及很多LIKE,IN& JOIN条款。这导致更高的CPU使用率和在服务调用java服务期间响应时间更长。
根据我们的分析,我们在DB中确定了4个占用大量空间的大表。决定是在另一台服务器中再添加一个DB并分配足够的内存。然后将这4个巨大的表移动到与现有数据库不同的表中。
任何人都可以建议这个想法有助于数据库优化,充分利用两个数据库或任何其他有用的技术吗?
答案 0 :(得分:0)
现有服务器是否已超出其CPU数量?通常,CPU不是问题,而是I / O容量(网络,磁盘)。您可以在现有服务器上提供更多I / O资源,然后在不同磁盘上分发临时db,tx日志和可能的四个表。
跨两个服务器拆分架构对Java客户端来说是不透明的。此外,如果这些表与模式的其余部分之间存在参照完整性约束,则除非删除约束,否则无法执行此操作。
一种替代方法是使用transcactional复制将您的完整架构复制到另一台服务器。您可以将两个实例放在负载均衡器后面。或者您将所有只读进程移动到复制。
但复制有其自身的缺点。例如。模式更改变得更难,因为不能复制所有类型的更改。卡住tx复制很难解决。
在开始之前,请确保您拥有适当的索引。视图sys.dm_db_missing_index_details可以帮助您。查看MSDN article,了解如何查询视图。