我需要将现有的应用程序移至windows azure虚拟机。此应用程序将大量数据(插入到)写入数据库。当我向磁盘写入大量数据时,Azure虚拟机上的sql server性能不佳
因此,我在Azure虚拟机上创建了一个SQL Server计算机,并根据Azure虚拟机上的SQL Server的Microsoft最佳实践(http://msdn.microsoft.com/en-us/library/azure/dn133149.aspx)配置了该环境。
我测试这个SQL查询我的电脑上,并在Azure VM我的SQL Server上:
WHILE @i <= 100000 BEGIN
INSERT INTO sales (id, created) VALUES (@i, GETDATE());
SET @i = @i + 1;
END
当我跑我的机器43秒后其完成此查询。 当我在蔚蓝的虚拟机上运行这个查询时,它需要花费10分钟! (我尝试使用单个磁盘并使用2个和4个磁盘进行分条)。
我尝试测试多个场景代码,与交易:
WHILE @i <= 100000 BEGIN
-- Start a transaction
IF @i % 10000 = 1
BEGIN TRANSACTION;
INSERT INTO sales (id) VALUES (@i);
SET @i = @i + 1;
-- Commit after each 10,000 row
IF @i % 10000 = 0
COMMIT;
END
这种情况下工作确定在两个环境中(我的电脑&蔚蓝VM)。
当我在sql azure VM服务器上运行SQLIO时,得到的结果适合第二个查询结果(包含事务)。
我的应用程序必须在没有事务的情况下运行。
有人知道如何解决这个问题吗? 谢谢。
如果你只是比较物理硬件的速度与虚拟机,这个问题不适合在StackOverflow。也许ServerFault可能会更好?无论如何,在目前的形式下,您甚至不包括机器大小,无论是为自己的机器还是部署的VM。即使您将此内容发布到ServerFault,它仍然是无法回答的。 – 2014-09-01 11:09:46
那么日志存储在磁盘上呢?通过尝试在单个事务中一次写入一行,会给日志造成巨大的压力。无论如何,如果你想写这样的数据到数据库,有更好的方法,比如做一个INSERT/SELECT来一次从源数据中提取数据。也许,如果您发布了* actual *查询,我们可以帮助您解决它 – 2014-09-01 11:22:48