WEB开发网
开发学院数据库DB2 通过 DB2 TPC-C 基准实现探索 SQL(2) 阅读

通过 DB2 TPC-C 基准实现探索 SQL(2)

 2008-09-17 16:31:45 来源:WEB开发网   
核心提示: 清单 14. 用于支付事务的 SQL 语句1SELECT W_STREET_1, W_STREET_2, W_CITY, W_STATE,W_ZIP2, D_STREET_1, D_STREET_2, D_CITY, D_STATE, D_ZIP3, C_ID, C_FIRST, C_MI

清单 14. 用于支付事务的 SQL 语句

1
    SELECT  W_STREET_1, W_STREET_2, W_CITY, W_STATE, W_ZIP
2    , D_STREET_1, D_STREET_2, D_CITY, D_STATE, D_ZIP
3    , C_ID, C_FIRST, C_MIDDLE, C_STREET_1, C_STREET_2
4    , C_CITY, C_STATE, C_ZIP, C_PHONE, C_SINCE, C_CREDIT, C_CREDIT_LIM
5    , C_DISCOUNT, C_BALANCE, C_DATA 
6 
    INTO  :w_street_1 , :w_street_2 , :w_city , :w_state , :w_zip
7    , :d_street_1 , :d_street_2 , :d_city , :d_state , :d_zip
8    , :c_id , :c_first , :c_middle ,  :c_street_1 , :c_street_2 , :c_city , :c_state
9    , :c_zip , :c_phone , :c_since , :c_credit , :c_credit_lim
10    , :c_discount , :c_balance, :c_data :c_data_indicator
11 
    FROM TABLE ( PAY_C_LAST(  :w_id
12              , :d_id
13              , :c_w_id
14              , :c_d_id
15              , :c_last_input
16              , :h_date
17              , :h_amount
18              , :c_data_prefix_c_last
19             )
20        )
    AS PAY_C_LAST
21 
    WITH RR USE AND KEEP UPDATE LOCKS

在通常的优化的基础上,还应注意两种新的技术:

为了确定正确的客户,需要读 CUSTOMER 表。只有在此基础上,才可以执行对 CUSTOMER 表的更新。默认情况下,这意味着所有姓氏有问题的客户行将获得一个 共享锁(share lock)。为执行更新,需要将共享锁转换为一个 更新锁(update lock)。这里有一个小小的风险,同一个客户可能想要在同一时间为另一个订单进行支付。如果是在取数据(fetch)和更新(update)之间发生这样的情况,那么就会出现 死锁(dead lock),因为如果另一个事务持有共享锁的话,这两个事务就都不能获得更新锁。为了避免这样情况发生,DB2 V8.2 支持所谓的 lock-request-clause。在这个例子中, WITH RR USE AND KEEP UPDATE LOCKS 将导致 DB2 在整个语句中收集最少的更新锁,而不是共享锁。为了语义上的纯净和未来的可扩展性,这个 SQL 函数使用一个匹配子句 INHERIT ISOLATION LEVEL WITH LOCK REQUEST。

上一页  1 2 3 4 5 6 7  下一页

Tags:通过 DB TPC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接