2017-03-13 69 views
0

我们正在将一些数据库从运行SQL Server的Azure VM迁移到Azure SQL。当前的VM是标准DS12 v2,附带有两个1TB SSD。Azure SQL数据库更新性能

我们在P1性能级别使用弹性池。我们在这个早期,所以没有别的东西真的在游泳池中运行。

无论如何,我们正在做一个ETL过程,涉及的〜20M排表屈指可数。我们批量加载这些表,然后更新一些属性以帮助完成其余的过程。

例如,我目前运行以下更新:

UPDATE A 
SET A.CompanyId = B.Id 
FROM etl.TRANSACTIONS AS A 
LEFT OUTER JOIN dbo.Company AS B 
ON A.CO_ID = B.ERPCode 

成交〜20M行;公司是少于50

我已经到30分钟运行此更新,远远超出了可以接受的。游泳池上的使用计量表徘徊在40%左右。 作为参考,我们的Azure虚拟机在大约2分钟内运行它。

我通过批量复制加载此表,此更新已经超出了它采取加载整个表。

有关加速此(和其他)更新的任何建议?

+0

弹性池是否存在限制 - 也就是说,您是否限制此数据库使用超过40%的DTU? –

+0

你读过这个吗? https://alexandrebrisebois.wordpress.com/2013/02/16/using-sqlbulkcopy-to-insert-massive-amounts-of-data-into-windows-azure-sql-database/ – CSharpRocks

+0

是的,批量加载部分这个过程不是问题。我在大约30分钟内加载整个表格。我在一夜之间完成了更新,并且运行了五个小时。 –

回答

0

真正回答这个问题的是,SQL Azure的将波及到tempdb的速度远远超过你所期望的,如果你是习惯于使用井水sioned VM或物理机器。

您可以通过记录实际执行查询计划来判断是否发生了这种情况。查找警告图标: warning sign

弹出窗口会抱怨泄漏: POpul text

无论如何,如果你看到这一点,很可能是你试图做太多的发言。

Microsoft支持人员建议更新统计信息,但这并没有改变我们的情况。

似乎正在工作的是传统的建议,将插入分成更小的批次。

0

我们正在使用的P1的性能水平的弹性池。

不知道,如何转换您的虚拟机的性能水平,您使用的是比较两种

我建议下面的步骤,因为没有执行计划提供..

1的标准是什么。检查是否有任何等待的类型,而更新正在运行

select 
session_id, 
start_time, 
command, 
db_name(ec.database_id) as dbname, 
blocking_session_id, 
wait_type, 
last_wait_type, 
wait_time, 
cpu_time, 
logical_reads, 
reads, 
writes, 
((database_transaction_log_bytes_used +database_transaction_log_bytes_reserved)/1024)/1024 as logusageMB, 
txt.text, 
pln.query_plan 
from sys.dm_exec_requests ec 
cross apply 
sys.dm_exec_sql_text(ec.sql_handle) txt 
outer apply 
sys.dm_exec_query_plan(ec.plan_handle) pln 
left join 
sys.dm_tran_database_transactions trn 
on trn.transaction_id=ec.transaction_id 

等待类型,为您提供大量的信息,可用于解决..

2.You也可以使用下面的查询并行地看到,什么是与查询

set statistics profile on 
your update query 

发生,那么下面的查询在一个单独的窗口

select 
session_id,physical_operator_name, 
row_count,actual_read_row_count,estimate_row_count,estimated_read_row_count, 
rebind_count, 
rewind_count, 
scan_count, 
logical_read_count, 
physical_read_count, 
logical_read_count 
from 
sys.dm_exec_query_profiles 
where session_id=your sessionid; 

按您的问题跑,有不要似乎是DTU.So一个问题,我没有看到在这一方面多问题..