>47_word_end<>48_word_end<

>146_word_end<#

>186_word_end<>187_word_end<토토 사이트 순위 PostgreSQL<<>189_word_end<>186_word_end<>191_word_end<>192_word_end<>193_word_end<>194_word_end<>195_word_end<

데이터베이스 서버에서 >69_word_end< 미결 >216_word_end< >216_word_end< 장치 목록을 검사하려면 사용하십시오.>198_word_end<>199_word_end<토토 핫 : 문서 : 17<.

>207_word_end<#

>213_word_end<>186_word_end<>215_word_end<>216_word_end<. 이름에 단어가 포함되어 있어도이 모든 >216_word_end< 모드는 테이블 레벨 >216_word_end<입니다.>219_word_end<; >216_word_end< 모드의 이름은 역사적입니다. 어느 정도까지 이름은 각 >216_word_end< 모드의 일반적인 사용법을 반영하지만 의미는 모두 동일합니다. 하나의 >216_word_end< 모드와 다른 >216_word_end< 모드의 유일한 차이점은 각 충돌이있는 >216_word_end< 모드 세트입니다 (참조>222_word_end<>371_word_end< 두 개의 트랜잭션은 >370_word_end< >370_word_end< 상충되는 모드의 >216_word_end<을 보유 할 수 없습니다. (그러나 거래는 그 자체와 상충되지 않습니다. 예를 들어, >367_word_end< 할 수 있습니다>194_word_end<>216_word_end< 및 나중에 >367_word_end<>226_word_end<동일한 테이블을 잠그십시오.) 비 분화 >216_word_end< 모드는 많은 거래에 의해 >370_word_end< 유지 될 수 있습니다. 특히 일부 >216_word_end< 모드는 자체적으로 자체적으로 표시됩니다 (예 : AN>194_word_end<>216_word_end<은 한 번에 둘 이상의 거래로 보류 할 수 없습니다>371_word_end< 다른 것들은 자체적으로 자체적으로 변하지 않습니다 (예 : an>226_word_end<>216_word_end< 장치는 여러 거래에서 유지할 수 있습니다>371_word_end<

테이블 레벨 >216_word_end< 모드

>226_word_end<(>239_word_end<)

>194_word_end<>216_word_end< 모드 만.

>246_word_end<>247_word_end<>295_word_end<은 참조 테이블 에서이 모드의 >216_word_end<을 얻습니다. 일반적으로 모든 쿼리 만>249_word_end<테이블과 수정하지 않으면이 >216_word_end< 모드를 얻습니다.

>253_word_end<(>219_word_end)

>259_word_end<>260_word_end<>194_word_end<>216_word_end< 모드.

>247_word_end<>295_word_end<은 모든 테이블 에서이 모드의 >216_word_end<을 >367_word_end<합니다.>266_word_end<, 키 >266_word_end< 없음, >270_word_end<>271_word_end<>272_word_end<>273_word_end<>226_word_end<명시 적없이 참조되는 다른 테이블의 >216_word_end<>276_word_end<>216_word_end< 옵션>371_word_end<

>219_word_end< Exclusive(>219_word_end<>402_word_end<)

>270_word_end<, >270_word_end< ROW >259_word_end<, >259_word_end<>194_word_end<>216_word_end< 모드.

>295_word_end<>266_word_end<, >298_word_end<, >300_word_end<>302_word_end<대상 테이블 에서이 >216_word_end< 모드를 >367_word_end<합니다 (>226_word_end<다른 참조 테이블의 >216_word_end<>371_word_end< 일반적 으로이 >216_word_end< 모드는 모든 >295_word_end<에 의해 >367_word_end<됩니다.>306_word_end<>307_word_end<

>259_word_end< >266_word_end< >270_word_end<(>312_word_end<)

>270_word_end< >266_word_end< >259_word_end<, >270_word_end<, >270_word_end< ROW >259_word_end<, >259_word_end<>194_word_end<>216_word_end< 모드. 이 모드는 동시 스키마 변경으로부터 테이블을 보호하고>326_word_end<>327_word_end<

>329_word_end<>326_word_end<(>332_word_end<>333_word_end<>334_word_end<, >336_word_end<, >338_word_end<, >340_word_end<, >342_word_end<>343_word_end<>344_word_end<>346_word_end<변형 (자세한 내용은이 >295_word_end<의 문서를 참조하십시오>371_word_end<

>270_word_end<(>352_word_end<)

>219_word_end< Exclusive, >358_word_end<, >270_word_end< ROW >259_word_end<, >259_word_end<>194_word_end<>216_word_end< 모드. 이 모드는 동시 데이터 변경으로부터 테이블을 보호합니다.

>367_word_end<>368_word_end<(>370_word_end<>371_word_end<

>270_word_end< ROW >259_word_end<(Share>219_word_end)

>219_word_end< Exclusive, >270_word_end< >266_word_end< >259_word_end<, ​​>270_word_end<, >270_word_end< ROW >259_word_end<, >259_word_end<>194_word_end<>216_word_end< 모드. 이 모드는 동시 데이터 변경으로부터 테이블을 보호하며 한 번에 한 세션 만 보유 할 수 있도록 자체적으로 >259_word_end<적입니다.

>367_word_end<>394_word_end<>395_word_end<>346_word_end<.

>259_word_end<(>402_word_end<)

>406_word_end<, >219_word_end< Exclusive, >270_word_end< >266_word_end< >259_word_end<, >270_word_end<, >270_word_end< ROW >259_word_end<, >259_word_end<>194_word_end<>216_word_end< 모드. 이 모드는 동시 만 허용>226_word_end<>216_word_end<.

>329_word_end<Refresh Restocized View >370_word_end<.

>194_word_end<(>430_word_end<)

모든 모드의 >216_word_end<과 충돌합니다 (>226_word_end<, >253_word_end<, >219_word_end< Exclusive, >270_word_end< >266_word_end< >259_word_end<, >443_word_end<, >270_word_end< 행 >259_word_end<, >259_word_end<>194_word_end<>371_word_end< 이 모드는 홀더가 어떤 식 으로든 테이블에 액세스하는 유일한 트랜잭션임을 보장합니다.

>367_word_end<>453_word_end<, >192_word_end<, >457_word_end<, >459_word_end<, >326_word_end< Full>463_word_end<(>370_word_end<) >295_word_end<. 여러 형태의>344_word_end<>260_word_end<>346_word_end<또한이 레벨에서 >216_word_end<을 얻습니다. 이것은 또한의 기본 >216_word_end< 모드입니다.>216_word_end< 테이블>472_word_end<

>194_word_end<>216_word_end< 블록 A>247_word_end<(>266_word_end270_word_end<>486_word_end<

일단 >329_word_end<하면, 자물쇠는 일반적으로 거래가 끝날 때까지 유지됩니다. 그러나 SavePoint를 설정 한 후 >216_word_end<이 >367_word_end<되면 SavePoint가 다시 >490_word_end<되면 >216_word_end<이 즉시 해제됩니다. 이것은 원칙과 일치합니다.>490_word_end<SavePoint 이후 >295_word_end<의 모든 효과를 취소합니다. A 내에서 >367_word_end< 한 자물쇠에 대해서도 마찬가지입니다.>492_word_end<예외 블록 : 블록에서 오류가 발생하여 그 안에 >367_word_end< 한 >216_word_end< 장치를 릴리스합니다.

>222_word_end<. 충돌 >216_word_end< 모드

152_word_end<> 152_word_end<> <>246_word_end 246_word_end
요청 된 >216_word_end< 모드 기존 >216_word_end< 모드
>226_word_end< >219_word_end< Share >219_word_end< Excl. >270_word_end< >266_word_end< 제외 >270_word_end< >270_word_end< 행 제외 >531_word_end< >533_word_end<
>226_word_end< x
>253_word_end< x x
>219_word_end< Excl. x x x x
>270_word_end< >266_word_end< 제외 x x x x x
>270_word_end< x x x x x
>270_word_end< 행 제외 x x x x x x
>531_word_end< x x x x x x x
>533_word_end< x x x x x x x x

13.3.2. 로우 레벨 >216_word_end<#

테이블 레벨 >216_word_end< 외에도로드 레벨 >216_word_end< 장치가 있으며, 여기에는 컨텍스트가 자동으로 사용되는 컨텍스트와 함께>186_word_end<>689_word_end<>690_word_end<로드 레벨 >216_word_end< 충돌의 전체 테이블. 트랜잭션은 다른 잠수함에서도 동일한 행에서 충돌하는 >216_word_end< 장치를 보유 할 수 있습니다. 그러나 그 외에는 두 개의 거래는 같은 행에 충돌하는 >216_word_end< 장치를 보유 할 수 없습니다. 로우 레벨 >216_word_end<은 데이터 쿼리에 영향을 미치지 않습니다. 그들은 만 차단>692_word_end<같은 행으로. 로드 레벨 >216_word_end<은 트랜잭션 끝 >271_word_end< SavePoint >490_word_end< 중에 테이블 레벨 >216_word_end<과 마찬가지로 릴리스됩니다.

로우 레벨 >216_word_end< 모드

>266_word_end<

>266_word_end<>247_word_end<>266_word_end<를 위해 잠겨 진술서. 이로 인해 >69_word_end< 트랜잭션이 끝날 때까지 다른 트랜잭션에 의해 잠긴, 수정 >271_word_end< >298_word_end<되는 것을 방지합니다. 즉, 시도하는 다른 거래>266_word_end<, >298_word_end<, >266_word_end< 선택, 키 >266_word_end< 없음 선택, >270_word_end< 선택>271_word_end<키 >270_word_end< 선택이 행 중 >69_word_end< 트랜잭션이 끝날 때까지 차단됩니다. 거꾸로,>266_word_end< 선택같은 행에서 해당 >295_word_end<을 실행 한 동시 거래를 기다린 >158_word_end< >266_word_end< 된 행을 잠그고 반환합니다 (>271_word_end< 행이 >298_word_end< 된 경우 행이 없음>371_word_end< A 내에서반복 가능한 >249_word_end<>271_word_end<>721_word_end<트랜잭션은 거래가 시작된 이후로 >216_word_end< 될 행이 변경되면 오류가 발생합니다. 추가 논의는 참조>220_word_end<<.

>246_word_end<>266_word_end<>216_word_end< 모드도 >367_word_end<합니다>298_word_end<>730_word_end<>266_word_end<특정 열의 값을 수정합니다. >69_word_end<에 고려 된 열 세트>266_word_end<케이스는 외국 키에서 사용할 수있는 고유 한 지수를 가진 것입니다 (따라서 부분 색인 및 표현 적 인덱스는 고려되지 않음>371_word_end< 그러나 이것은 향후 변화 할 수 있습니다..

키 >266_word_end< 없음

>740_word_end<>266_word_end<, >367_word_end< 한 자물쇠가 약한 경우를 제외하고 :이 >216_word_end< 장치는 차단되지 않습니다키 >270_word_end< 선택같은 행에서 >216_word_end<을 얻으려고 시도하는 >295_word_end<. 이 >216_word_end< 모드는 또한에 의해 >367_word_end<됩니다.>266_word_end<>367_word_end<하지 않는>266_word_end<>216_word_end<.

>270_word_end<

>740_word_end<키 >266_word_end< 없음- 검색된 각 행에서 >259_word_end<적 인 >216_word_end<이 아닌 >270_word_end< >216_word_end< 장치를 얻는 것을 제외하고. >270_word_end< >216_word_end< 장치는 다른 트랜잭션이 수행되는 것을 막는다>266_word_end<, >298_word_end<, >266_word_end< 선택or키 >266_word_end< 없음 선택이 행에서는이 행에서 수행하는 것을 방해하지는 않습니다>270_word_end< 선택>271_word_end<키 >270_word_end< 선택.

>272_word_end<

와 >740_word_end<>270_word_end<- >216_word_end< 장치가 약한 경우를 제외하고 :>266_word_end< 선택차단되었지만키 >266_word_end< 없음 선택. 키 >270_word_end< >216_word_end< 장치는 다른 트랜잭션이 수행되는 것을 막는다>298_word_end<>271_word_end< 어떤>266_word_end<기타 값을 변경하지만 다른 것은 아닙니다>266_word_end<키 >266_word_end< 없음 선택, >270_word_end< 선택>271_word_end<키 >270_word_end< 선택.

>186_word_end<메모리에서 수정 된 행에 대한 정보는 기억되지 않으므로 한 번에 잠긴 행의 수에는 제한이 없습니다. 그러나 행을 잠그면 디스크 쓰기가 발생할 수 있습니다 (예 :>266_word_end< 선택선택한 행을 고정시키기 위해 수정하여 디스크가 쓰여집니다.

>690_word_end<. 충돌하는 행 수준 >216_word_end<

152_word_end<> 152_word_end<> <>246_word_end 246_word_end
요청 된 >216_word_end< 모드 >69_word_end< >216_word_end< 모드
>272_word_end< >270_word_end< 키 >266_word_end< 없음 >266_word_end<
>272_word_end< x
>270_word_end< x x
키 >266_word_end< 없음 x x x
>266_word_end< x x x x

13.3.3. 페이지 수준의 >216_word_end<#

테이블 및 행 >216_word_end< 외에도 페이지 수준 >270_word_end259_word_end< >216_word_end< 장치는 >270_word_end< 버퍼 풀의 테이블 페이지에 대한 >249_word_end266_word_end< 된 직후에 해제됩니다. 응용 프로그램 >22_word_end<는 일반적으로 페이지 수준의 >216_word_end<에 관심이 없지만 완전성을 위해 언급되어 있습니다.

13.3.4. 교착 상태#

명백한 >216_word_end<을 사용하면의 가능성이 높아질 수 있습니다.교착 상태예를 들어, 트랜잭션 1이 표 A에 대한 >259_word_end< >216_word_end<을 >367_word_end< 한 >158_word_end< 표 B에서 >259_word_end< >216_word_end<을 얻으려고 시도하는 반면, 트랜잭션 2는 이미 >259_word_end<적으로 >216_word_end< 된 표 B를 사용했으며 이제 표 A에 대한 >259_word_end< >216_word_end<을 원한다면 어느 쪽도 진행할 수 없습니다..>186_word_end<교착 상태를 자동으로 감지하고 관련된 트랜잭션 중 하나를 중단하여 다른 사람이 완료 할 수있게하여 해결합니다. (정확히 어떤 거래가 중단 될지 예측하기 어렵고 의존해서는 안됩니다.)

행 수준 >216_word_end<의 결과로 교착 상태가 발생할 수 있습니다 (따라서 명시 적 >216_word_end<이 사용되지 않더라도 발생할 수 있음>371_word_end< 두 개의 동시 트랜잭션이 표를 수정하는 경우를 고려하십시오. 첫 번째 트랜잭션이 실행됩니다.

>266_word_end< >28_word_end< 설정 밸런스 = 밸런스 + 100.00 여기서 acctnum = 11111;

이것은 지정된 >28_word_end< 번호로 행에서로드 레벨 >216_word_end<을 취득합니다. 그런 >158_word_end< 두 번째 트랜잭션이 실행됩니다.

>266_word_end< >28_word_end< 설정 밸런스 = 밸런스 + 100.00 여기서 acctnum = 22222;
>28_word_end< >266_word_end< 설정 밸런스 = 밸런스 -100.00 여기서 acctnum = 11111;

첫 번째>266_word_end<Statement는 지정된 행에서로드 레벨 >216_word_end<을 성공적으로 >367_word_end<하므로 해당 행을 >266_word_end<하는 데 성공합니다. 그러나 두 번째>266_word_end<>295_word_end<문은 >266_word_end<를 시도하는 행이 이미 잠겨 있음을 발견하므로 >216_word_end<을 완료 한 거래가 완료되기를 기다립니다. 트랜잭션 2는 이제 실행을 계속하기 전에 거래 1을 완료하기를 기다리고 있습니다. 이제 트랜잭션이 실행됩니다.

>266_word_end< >28_word_end< 설정 밸런스 = 밸런스 -100.00 여기서 acctnum = 22222;

트랜잭션은 지정된 행에서로드 레벨 >216_word_end<을 얻으려고 시도하지만 : 트랜잭션 2는 이미 그러한 >216_word_end<을 보유하고 있습니다. 따라서 거래 2가 완료되기를 기다립니다. 따라서 트랜잭션 1은 거래 2에서 차단되며 거래 2는 트랜잭션 1에 차단됩니다. 교착 상태.>186_word_end<이 상황을 감지하고 거래 중 하나를 중단합니다.

교착 상태에 대한 최상의 방어는 일반적으로 데이터베이스를 사용하는 모든 응용 프로그램이 일관된 순서로 여러 객체에서 >216_word_end<을 >367_word_end<한지 확인함으로써이를 피하는 것입니다. 위의 예에서, 두 거래 모두 동일한 순서로 행을 >266_word_end< 한 경우 교착 상태가 발생하지 않았을 것입니다. 또한 트랜잭션에서 객체에서 >367_word_end< 한 첫 번째 >216_word_end< 장치가 해당 객체에 필요한 가장 제한적인 모드인지 확인해야합니다. 이를 미리 확인하는 것이 불가능한 경우 교착 상태로 인해 중단되는 거래를 다시 시도하여 교착 상태를 처리 할 수 ​​있습니다..

교착 상태 상황이 감지되지 않는 한, 테이블 레벨 >271_word_end<로드 레벨 >216_word_end<을 원하는 거래는 충돌하는 >216_word_end< 장치가 해제 될 때까지 무한정 대기합니다. 즉, 응용 프로그램이 트랜잭션을 장시간 열어 두는 것이 좋지 않다는 것을 의미합니다 (예 : 사용자 입력을 기다리는 동안>371_word_end<

13.3.5. 자문 >216_word_end<#

>186_word_end<응용 프로그램 정의 의미가있는 >216_word_end< 장치를 생성하는 수단을 제공합니다. 이것들은라고합니다.자문 >216_word_end<, 시스템은 사용을 시행하지 않기 때문에 올바르게 사용하는 것은 응용 프로그램에 달려 있습니다. 자문 >216_word_end<은 >188_word_end< 모델에 어색한 >216_word_end< 전략에 유용 할 수 있습니다. 예를 들어, 자문 >216_word_end< 장치의 일반적인 사용은 소위의 전형적인 비관적 >216_word_end< 전략을 모방하는 것입니다플랫 파일데이터 관리 시스템. 테이블에 저장된 깃발은 동일한 목적으로 사용될 수 있지만 자문 >216_word_end< 장치는 더 빠르고 테이블 부풀어 오르고 세션이 끝날 때 서버에 의해 자동으로 정리됩니다..

자문 >216_word_end<을 취득하는 두 가지 방법이 있습니다>186_word_end<: 세션 수준 >271_word_end< 트랜잭션 수준에서. 세션 수준에서 >329_word_end<되면, 명시 적으로 릴리스되거나 세션이 종료 될 때까지 자문 >216_word_end<이 유지됩니다. 표준 >216_word_end< 요청과 달리 세션 수준의 자문 >216_word_end< 요청은 트랜잭션 시맨틱을 존중하지 않습니다. 나중에 >490_word_end<으로 >490_word_end<하는 트랜잭션 중에 >367_word_end< 한 >216_word_end<은 여전히 ​​>490_word_end< 후에도 유지되며 마찬가지로 호출 트랜잭션이 나중에 실패하더라도 >216_word_end< 해제는 효과적입니다. 자물쇠는 소유 프로세스에 의해 여러 번 >367_word_end< 될 수 있습니다. 완성 된 각 >216_word_end< 요청에 대해 >216_word_end<이 실제로 해제되기 전에 해당 >216_word_end< 해제 요청이 있어야합니다. 반면에 거래 수준의 >216_word_end< 요청은 일반 >216_word_end< 요청과 비슷합니다. 거래가 끝날 때 자동으로 릴리스되며 명시 적 >216_word_end< 해제 작업이 없습니다. 이 동작은 종종 자문 >216_word_end< 장치의 단기 사용에 대한 세션 수준 동작보다 더 편리합니다. 동일한 자문 >216_word_end< 식별자에 대한 세션 수준 및 거래 수준 >216_word_end< 요청은 예상되는 방식으로 서로를 차단합니다. 세션이 이미 주어진 자문 >216_word_end< 장치를 보유하고 있다면 다른 세션이 >216_word_end<을 기다리는 경우에도 추가 요청이 항상 성공합니다. 이 진술은 기존 >216_word_end< 홀드와 새 요청이 세션 수준 >271_word_end< 트랜잭션 수준에 있는지 여부에 관계없이 사실입니다.

모든 자물쇠처럼>186_word_end<, >69_word_end< 모든 세션에서 보유한 자문 >216_word_end< 장치 목록은에서 찾을 수 있습니다.>198_word_end<시스템보기

자문 >216_word_end< 장치와 일반 >216_word_end<은 모두 구성 변수에 의해 크기가 정의되는 >270_word_end< 메모리 풀에 저장됩니다max_locks_per_transaction>260_word_end<max_connections. 이 메모리를 소진시키지 않도록주의해야합니다. 그렇지 않으면 서버가 >216_word_end<을 전혀 부여 할 수 없습니다. 이는 서버가 부여 할 수있는 자문 >216_word_end< 수의 수에 상한을 부과합니다. 일반적으로 서버 구성 방식에 따라 수십에서 수십만 안에..

특정 경우 자문 >216_word_end< 방법을 사용하는 경우, 특히 명시 적 순서 및 쿼리에서Limit조항, SQL 표현이 평가되는 순서로 인해 >367_word_end< 한 자물쇠를 제어하려면주의를 기울여야합니다. 예를 들어:

foo에서 pg_advisory_lock (id)을 선택하여 id = 12345; -- 좋아요
foo에서 pg_advisory_lock (id)을 선택하십시오. - 위험!
pg_advisory_lock (q.id)을 선택하십시오
(
  id 12345 Limit 100의 Foo에서 ID를 선택하십시오.
) Q; -- 좋아요

위의 쿼리에서 두 번째 양식은 위험하기 때문에Limit>216_word_end< 기능이 실행되기 전에 적용되지 않습니다. 이로 인해 일부 >216_word_end< 장치가 응용 프로그램이 예상되지 않았으므로 릴리스되지 않으므로 (세션이 끝날 때까지) 릴리스되지 않습니다. 응용 프로그램의 관점에서 볼 때, 그러한 자물쇠는 매달려있을 것입니다.>198_word_end<.

자문 >216_word_end<을 조작하기 위해 제공된 기능은에 설명되어 있습니다.섹션 >107_word_end<>119_word_end<0.

수정 제출

올바른 문서에 아무것도 표시되면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 >271_word_end< 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면