代码之家  ›  专栏  ›  技术社区  ›  Alex Bagnolini

远程SQL Server 2008性能

  •  1
  • Alex Bagnolini  · 技术社区  · 15 年前

    我的公司最近在他的远程服务器上建立了一个演示数据库,允许我们的一些合作伙伴测试我们的测试版软件。

    正如预期的那样,我们注意到程序的某些部分存在一些瓶颈,特别是在执行许多查询的地方。

    例如,我必须加载 顾客 从数据库里,带着他所有的 产品 与他有关的。

    通常情况下,此操作将按以下步骤进行:

    • select somefields from customers where id = someId
    • 将其存储到商务舱
    • select someotherfiels from products where customerid = previousid
    • 存储以收集并显示/使用它们。

    想象一个更复杂的业务逻辑,它将以相同的方式收集8到12个表。有了本地数据库,这将是即时的。但通过连接到远程托管的SQL Server,这是非常缓慢的。

    我们发现做一个查询,比如

    SELECT Customer.Field1, Customer.Field2, Product.Field1, Product.Field2,
           --//LIST OTHER 200 FIELDS FROM 10 DIFFERENT TABLE SE SAME WAY 
    FROM Customer
    LEFT JOIN Product ON Product.IdCustomer = Customer.IdCustomer
    --//LEFT JOIN OTHER 10 TABLES THE SAME WAY
    WHERE Customer.IdCustomer = 10
    


    事实上,这比它们中的每一个的单个选择都要复杂得多,而事实上这只是一个简单的选择 访问服务器。
    我说的是~2000/3000ms到80-120ms。

    真正的问题来了(对不起,序言太长了)。 我怎么能 拯救

    假设我有一个窗口/窗体/对话框/框架/任何我应该在给定操作后保存更多表的地方。

    例如:

    • INSERT INTO Customer (Field) VALUES ('hello world') “IdCustomer”是一个标识列
    • INSERT INTO SomeLinkedTable (IdCustomer, Field) VALUES (x, 'new value')
    • 获取新的“IdSomeLinkedTable”,使用它链接某些表,ecc ecc。。

    这是我们程序中多次保存的常见方式。即使我们没有给用户留下操作需要一段时间的信息,等待10秒来执行频繁的多次插入操作也是太多了。

    也许这是一个简单的服务器配置问题,但我发誓双方(我们的&服务器)的所有防火墙都已正确配置,允许一些SQL server访问。

    有人遇到过同样的问题吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Remus Rusanu    15 年前

    如果将所有业务逻辑拉入应用层,则应用层必须靠近数据库。

    fiefdoms-and-emissaries 因此,可以移除与数据库的紧密耦合。

    作为一种临时解决方案,您可以通过删除到数据库的往返来加速任何操作。如果必须保存主详细信息表单,则将整个操作作为单个T-SQL批处理(插入标题,选择@@identity,插入所有详细信息)发送为 一批

    在一天结束的时候,你不能既吃蛋糕又吃蛋糕。您可以创建一个支持远程、本地连接数据库的自治断开连接的应用程序,并演示该数据库,也可以创建一个紧密耦合的应用程序,该应用程序必须位于数据库附近并演示该数据库。