sybase的問題
近來在做sybase的性能調(diào)試,發(fā)現(xiàn)我啟動(dòng)多線程的時(shí)候,線程會(huì)處于lock sleeping。 剛開始還以為是數(shù)據(jù)庫不支持并發(fā)訪問,后來想想真幼稚。。原來是我在做并發(fā)插入數(shù)據(jù)的時(shí)候,該表的鎖設(shè)置為全頁加鎖了。 后來設(shè)置為數(shù)據(jù)行鎖,這樣才可以執(zhí)行并發(fā)操作的測試。 但是后面又遇到一個(gè)問題,就是out of lock的問題,也就是ASE設(shè)置的鎖不夠用。如果是在windows下的話,可以用ASE的補(bǔ)助工具修改number of locks來增加更多的鎖,因?yàn)樵O(shè)置的是數(shù)據(jù)行鎖,所以,在執(zhí)行Insert的時(shí)候,如果不提交事物的話,就會(huì)每一條數(shù)據(jù)加一個(gè)鎖。。在增加鎖的時(shí)候,必須要增加內(nèi)存,也就是增加max memory。。大概一個(gè)鎖占據(jù)的內(nèi)存是120byte。 如果是在Linux系統(tǒng)的話,就修改“服務(wù)名.cfg“文件。
1、全頁鎖(allpages lock) 對查詢的表及索引頁加鎖,也就是table lock
2、頁鎖 (data lock) 對所查詢的結(jié)果所在頁加鎖,對索引不加鎖
3、行鎖 (row lock) 對某行數(shù)據(jù)加鎖
sybase除非對配置參數(shù)加以特定,對所有的表都予置了隱含的全頁面加鎖機(jī)制。
sp_configure ‘lock scheme’, [allpages | datapages | datarows]
當(dāng)數(shù)據(jù)庫從原先版本的服務(wù)器中轉(zhuǎn)儲(chǔ)出來重新加載時(shí),所有的表都被定義為全頁面加鎖的表。當(dāng)建立一個(gè)新表時(shí),可以不使用這個(gè)缺省值,可采用如下的句法格式:
create table <tablename>;… lock [allpages | datapages | datarows]
為了在使用的一個(gè)表中改變加鎖類型,可以采用如下的句法格式:
alter table <tablename>; lock [allpages | datapages | datarows]
1、全頁鎖(allpages lock) 對查詢的表及索引頁加鎖,也就是table lock
2、頁鎖 (data lock) 對所查詢的結(jié)果所在頁加鎖,對索引不加鎖
3、行鎖 (row lock) 對某行數(shù)據(jù)加鎖
sybase除非對配置參數(shù)加以特定,對所有的表都予置了隱含的全頁面加鎖機(jī)制。
sp_configure ‘lock scheme’, [allpages | datapages | datarows]
當(dāng)數(shù)據(jù)庫從原先版本的服務(wù)器中轉(zhuǎn)儲(chǔ)出來重新加載時(shí),所有的表都被定義為全頁面加鎖的表。當(dāng)建立一個(gè)新表時(shí),可以不使用這個(gè)缺省值,可采用如下的句法格式:
create table <tablename>;… lock [allpages | datapages | datarows]
為了在使用的一個(gè)表中改變加鎖類型,可以采用如下的句法格式:
alter table <tablename>; lock [allpages | datapages | datarows]