database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6789 게시물 읽기
No. 6789
한 테이블 동시 접근에 관하여 질문 드려요!
작성자
이성원(wolfre)
작성일
2014-02-28 10:50
조회수
11,348

안녕하세요~

DB 관련 공부를하다 궁금한 점이있어 질문 드립니다.

 

A 테이블에 Identity 1,1로 10개의 컬럼이 잡혀있고

No | Column

1 testA

2 testB

3 testC

4 testD

 

B 테이블에는 A 테이블에서 사용한 No, Column 이 기록됩니다.

UseNo | UseColumn

1 testA

2 testB

 

 

사용자는 A테이블에서 사용되지 않은 No, Column을 찾아서 B에 인서트하는 로직인데요

 

궁금한 점이 만약에 동시에 EXISTS or SELECT로 A 테이블의 다음 Identity 를 찾거나, B에 없는 A를 찾는 차집합을 구하는 쿼리를 실행하는 경우 중복되는 결과 or 이상한 값이 나타날 수 있나요?

 

물론 현재 제 로컬환경에서는 저런 일이 없지만... 만약에 동접이 많은 시스템의 경우 문제의 소지가 있는지 궁금하여 질문드립니다.

 

선배님들 답변 부탁드립니다. __;

이 글에 대한 댓글이 총 4건 있습니다.

그래서 transaction이라는 개념이 있습니다만...

http://freekuku.egloos.com/2107926

http://technet.microsoft.com/ko-kr/library/ms174377.aspx

 

우욱님이 2014-02-28 16:01에 작성한 댓글입니다. Edit

우욱님 답변 감사합니다.

한 가지만 더 질문 드릴게요...

 

제가 생각중인 단계인데요

1. B에 Insert를 하려면 우선 A, B 차집합( B에 사용되지 않은 A의 리스트 )를 NOT IN or 기타 쿼리로 구하고, 나온 결과를 B에 Insert하려합니다.

 

답변 주신 트랜잭션으로 작업을 묶는다면, 동시 다발접인 접근?이 일어나면 테이블이 잠기지 않나요?

ex) 1번 단계를 동시에 몇 백명이 요구한다면!?

 

초보라 개념이 햇갈리네요 ㅜ.ㅜ

 

이성원(wolfre)님이 2014-02-28 18:54에 작성한 댓글입니다.
이 댓글은 2014-02-28 18:55에 마지막으로 수정되었습니다.

우선 NOT IN 처럼 차집합을 구하기 위해서 가장 최악 수준의 쿼리를 사용하면서 locking을 하면

네.. lock 때문에 차질이 많겠죠...

그래서 딱 위의 설명만으로는
No | Col | usedYN
1 | testA | 0
식으로 하나의 테이블만을 만들고 
UPDATE tbl
SET used = 1
WHERE No = @입력NO AND usedYN = 0
;
IF 0 = @@ROWCOUNT
-- 이미 누군가가 썼거나 아예 그런 번호가 없어서 사용됐다고 설정 못했음
ELSE
-- 사용됐다고 설정됐음
-- 이후 생략
이런 식으로 하여 row lock으로 해결될 수 있도록 하는 것이 더 좋아보이긴 합니다만 제가 모르는 2개의 테이블로 구성된 이유가 있겠죠. *^_^*

물론 상황에 따라서는 위에서 말씀드린 방식보다도 더 효율적인 방식도 있겠지만
아무리 잘 만들고 하드웨어를 잘 갖춰 놓고 앞단에 Q를 쟁여 놓는다고 하더라도 기대치보다 훨씬 많이 몰린다면(상상의 나래를 한껏 펼쳐보면 중국인이 숨을 내쉴때마다 실행하기? 내지는 10만의 동접을 예상하고 만든 게임인데 초대박이 나서 동접이 50만을 돌파하면?)
당연히 뻗습니다.
그래서 실제 사용량에 근접하도록 예상치를 예측하고 그에 따른 대비를 마련하며, 그러한 상황을 가정한 모의 실험을 통해 검증하는 작업 등을 실제 서비스에 투입하기 전에 실행합니다.

우욱님이 2014-03-01 07:47에 작성한 댓글입니다. Edit

우우님 항상 멋진 답변 감사드립니다. 또 많은걸 배우네요 ^^

이성원(wolfre)님이 2014-03-03 09:54에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6792날짜 출력에 관하여 질문 드려용 [1]
이성원
2014-03-13
8385
6791mssql 에서 채번? PK코드 값을 자동으로 넣고 싶습니다. [4]
풀잎
2014-03-12
12765
6790테이블 데이터 삭제 후 조회. [3]
초보
2014-03-12
8780
6789한 테이블 동시 접근에 관하여 질문 드려요! [4]
이성원
2014-02-28
11348
6787전화번호 번호이동에 따른 전화번호 업데이트 관련 문의입니다. [6]
골프
2014-02-07
9448
6785IP접속 불가 [1]
신승범
2014-02-04
8631
6784group by 에서 최근값 가져오기 [1]
둥둥이
2014-01-23
9374
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다