在我们的生产环境中出现一些性能问题后,我请求数据库管理员提供帮助。在提供帮助的同时,他们告诉我合并会锁定表,并建议我改用UPDATE语句。
根据我所读到的所有内容,我的印象是MERGE INTO和UPDATE具有相似的增量锁定模式。下面是我们的应用程序正在使用的MERGE INTO语句的一个示例。
MERGE INTO sample_merge_table smt
USING (
SELECT smt.*, sjt.*
FROM sample_merge_table smt
JOIN some_join_table sjt
ON smt.index_value = sjt.secondary_index_value
WHERE smt.partition_index = partitionIndex
) umt ON (smt.partition_index = partitionIndex AND smt.index_value = umt.index_value)
WHEN MATCHED THEN
UPDATE SET...
WHEN NOT MATCHED THEN
INSERT VALUES...在运行此语句时,锁定过程实际上是什么?使用select时涉及的每个表都会被锁定吗?sample_merge_table是完全锁定,还是只锁定正在访问的分区?UPDATE语句是否会以增量方式锁定,或者MERGE INTO本身是否已经拥有所需的锁?
发布于 2013-11-05 10:49:00
https://stackoverflow.com/questions/15936152
复制相似问题