[問題] 102 高考三等 資料庫問題

看板Examination作者 (Len)時間9年前 (2015/05/03 22:47), 編輯推噓3(3017)
留言20則, 5人參與, 最新討論串1/1
Tr1和Tr2是兩個交易,某次執行程序如下:假設x和y在硬碟的初始值為 x=1000 y=1000。 Time| Tr 1| Tr2 ______________________ t1 | read X | t2 | read Y t3 | X=X-1000 | t4 | | read X t5 | write X | t6 | | Y=Y+1000 t7 | | write Y Q1 若兩交易以2PL執行,請問系統如何進行? 我的想法是用2PL的保守法,針對要用的資源先全部鎖定,用完後再一次釋放,故我先讓 Tr2先使用資源並全數鎖定X、Y,解鎖後再讓Tr1使用資源 Tr1 Tr2 -- ------------------------------- 鎖定期 Luck_read(y) Luck_read(X) Luck_write(Y) read Y ------------------------------------ 解鎖期 Y=X+1000 Unluck_write(Y) write Y Unluck_read(Y) Unluck_read(X) ------------------------------------ 鎖定期 Luck_read(X) Luck_write(X) ------------------------------------ X=X-1000 解鎖期 write X Unluck_write(X) Unluck_read(X) 請問可否這樣解? Q2.若使用time-stamp執行,且Tr在Tr2之後才進來,說明執行結果 設 Tr1 起始時間200 Tr1起始時間100 且分別設定write/read的起始時間分別為 W_max=90 R_max=90 Time| Tr1 | Tr2 ______________________ t1 | read X | // Tr1(200)>= R_max(90) , R_max=200 t2 | read Y //Tr2(100)<=R_max(200) , Tr2重跑 得到新的時間300 t3 | X=X-1000 | t4 | | read X // Tr2(300)>=R_max(200) , R_max=300 t5 | write X | //Tr1(200)< R_max(300) ,Tr1(200)> W_max(90),但 Tr1仍 //需重跑 得到新的時間400 t6 | | Y=Y+1000 t7 | | write Y //Tr2(300)>=R_max(200) 且 Tr2(300)>W_max(90) 但參考了高點的解答,為何說該兩交易之排成可順利完成 請版上高手綁我檢視我的想法有沒有問題?或有那裡考慮的不周全? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.135.121 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1430664435.A.0AB.html

05/04 07:21, , 1F
Q1你這樣做是不對的因為READLOCK是共享鎖所以TR1也使用了
05/04 07:21, 1F

05/04 07:22, , 2F
x但無法升級為WRITELOCK(X)必須等Y放掉所以不是TR2整個
05/04 07:22, 2F

05/04 07:23, , 3F
做完TR1才去LOCK X
05/04 07:23, 3F

05/04 07:29, , 4F
Q2在READ Y你就做錯了把READ X的TS拿來和Y的TS比
05/04 07:29, 4F

05/04 07:33, , 5F
T4只要比w_max是否>TR2的TS以這是TR2>W_MAX所以TR2可以
05/04 07:33, 5F

05/04 07:34, , 6F
READ X TR1會比R_MAX=TR1的TS和W_MAX<TR1的TS所以TR1可以
05/04 07:34, 6F

05/04 07:35, , 7F
write x之後Y可以做完
05/04 07:35, 7F

05/04 10:31, , 8F
m大正解,都被你講完了,我回去讀書囉。
05/04 10:31, 8F

05/04 11:23, , 9F
個人覺得,這種解因該是個人認知的解法,補習班不會這樣教
05/04 11:23, 9F

05/04 14:33, , 10F
你第一題答非所問 人家是要你用2PL做 沒叫你改排程
05/04 14:33, 10F

05/04 14:34, , 11F
改序列排程 根本就不用甚麼2PL跟time stamp
05/04 14:34, 11F

05/04 14:34, , 12F
第2題 如m大所說 你T2就錯了
05/04 14:34, 12F

05/04 14:35, , 13F
timestamp的定義要再複習一下喔
05/04 14:35, 13F

05/05 16:23, , 14F
m大所說的[必須等y放掉],我不太理解,我大膽的推敲,應該
05/05 16:23, 14F

05/05 16:24, , 15F
是[把READ_LOCK(X) UNLOCK後,才能WRITE_LOCK(X),是否
05/05 16:24, 15F

05/05 16:24, , 16F
正確?請幫我解答,感謝各位大大。
05/05 16:24, 16F

05/05 16:25, , 17F
我的意思是[把TR2的READ_LOCK(X) UNLOCK。^^
05/05 16:25, 17F

05/05 21:11, , 18F
樓上你答對了 應該是說 等Y做完 開始收縮階段
05/05 21:11, 18F

05/05 21:12, , 19F
Tr2收縮階段再把X unlock掉 TR1就可以write lock x囉
05/05 21:12, 19F

05/06 08:11, , 20F
謝謝囉,我想應該是大家解釋上的謬誤,感謝您。
05/06 08:11, 20F
文章代碼(AID): #1LHZJp2h (Examination)