我有一个目前有两个数据库的数据库服务器,称之为[A]和[B]。
[A]是用于我的应用程序的标准数据库 [B]被另一个应用程序使用(这会给服务器带来相当大的负担),但是,我们会谨慎地使用几个表(在我的应用程序和使用[B]的主应用程序之间共享)。最近[B]的使用一直在增加,并且在我的应用程序中导致了很长的等待时间和超时。
我愿意接受其他想法,但目前我提出的最快的潜在解决方案是获得第二个数据库服务器并将[A]移动到那个位置。但是,我确实需要访问[B]中的一些表 - 理想情况下,尽可能少地更改代码。
我们正在考虑如下设置:
电流: 数据库服务器1 {[A],[B]}(SQL Server 2005)
新设置 数据库服务器1 {[B]}(SQL Server 2005) 数据库服务器2 {[A],[B]}(SQL Server 2008)
在新设置中,DBServer2。[B]是DBServer1的链接表(种类)。[B]
我查看了链接数据库,从我的理解(有限)那些工作作为别名到另一台服务器上的数据库,这几乎是我们想要的,除了它添加了额外的服务器限定符,并且它在数据库级别上工作。我想做这样的事情,但理想情况下没有服务器限定符和表级别。
例如,[B]有表Users和Events。 Users表每周更新一次,我们经常使用它,所以我们希望在新的DBServer2上有一个本地副本。但是,我们使用的事件远不那么频繁,需要在两台服务器之间实时进行。在这种情况下,将事件作为链接表是很好的。
此外,如果我们可以使用相同的标记进行查询,那将是非常棒的。今天要从另一个查询一个数据库,我们会做类似
的事情select * from b.events join a.dates
我们想继续这样做,除非数据库服务器知道当我们触摸事件时它确实位于dbserver1.b.events。
这有意义吗?我有时会迷惑自己。
感谢您的帮助 〜P
答案 0 :(得分:0)
如何看待缓慢的原因?您正在测量的“负载”是多少? 您的磁盘如何在服务器上布局?
也许你可以使用更多内存,另一个CPU或一些SQL调优?
通过软件或硬件修复解决问题可能比获取服务器和执行所有安装更快,然后解决可能遇到的集成问题。
答案 1 :(得分:0)
您可以对链接对象使用同义词 - http://msdn.microsoft.com/en-us/library/ms177544%28SQL.90%29.aspx
遗憾的是,这仅适用于单个对象,您不能为linkedserver.databasename创建同义词,然后引用synDBName.table。