1년동안 MsSQL로 개발,LIVE서버 운영을 했었다.
처음엔 LIVE DB 테이블을 보고 실 데이터를 건드는것이 너무 무서워서 함부로 서버 연결하지 않았다..
그러나..몇개월 동안 안정적으로 운영을 하시는 것을 보고 나태해진 탓에-
운 영 디 비 를 내 맘 대 로 업 데 이 트 쳤 었 다
지금에야 업데이트를 쳤다 라고 말을 할 수 있었지만,
당시는 내가 무슨 일을 저질렀는지 몰랐다 ㅜ_ㅜ
몇개월동안 너무 트라우마가 생겨서...그거에 대해 언급도 못하다가~
이제 웃으면서 회상할 수 있는 시기가 되어서~한번 정리해보려고 한다.
1.서버 연결을 끊었더라도 무조건 '새 쿼리 창' 에서 쿼리 작업하기
SSMS창 1개당 서버1개를 연결해서 쓰면 좋겠지만, 회사 노트북이 램 8G였을 시절 SSMS키는데 5분 걸렸던 적도 있었다. 그래서 급한 마음에 LIVE/개발서버 2개를 한 SSMS창에 연결해서 사용했다.
운영 DB에서 혹여나 작업할까, 연결 끊기를 하고 쿼리를 작성했으나-
기존에 열려있던 쿼리창에서는 여전히 연결끊기한LIVE서버 로 연결이 되어있었다.
INSERT 하고 있었는데;; 소오름;; 대리님이 이거 확인해주셔서 너무 감사..
2. SELECT 를 날릴땐 with(nolock)조건 걸기
MSSQL에서 SELECT을 날리면 공유잠금에 걸린다. 쿼리를 실행하는 동안 ROW혹은 TABLE에 INSERT/UPDATE하는 작업은 블락되는 것!
반대로 생각하면 INSERT,UPDATE 작업이 있다면 SELECT문은 BLOCK된다. 그러면 DB성능이 저하된다....
SELECT할때 WITH(NOLOCK)조건을 걸면, 선행 작업과 상관없이 SELECT문이 수행되어서 결과를 반영하게 된다.
내가 일할때 SELECT에 이 조건을 거는 이유는 SELECT쿼리의 성능이 좋아지는것~을위해서가 아니라 그 반대의 경우가 많다.
LIVE로 돌아가는 서비스에 영향을 주면 안되기 때문에..락걸리면 디비뻗고 서버뻗고..아!!!!!!!!!!!
그리고 JOIN을 걸 경우 테이블마다 이 WITH(NOLOCK)조건을 걸어줘야 한다는 것 명심!
3. BEGIN TRAN, COMMIT, ROLLBACK 명심
이거는 최근에 UPDATE칠일이 많아지면서 배운건데ㅋㅋ
이거 몰랐으면 UPDATE/INSERT/DELETE 아무렇게나 치고 수기로 데이터 넣고있었을것 같다. 아찔하다.
USE [DB명]
GO
BEGIN TRAN
INSERT INTO [TABLE명]
VALUES(COLUMN1, COLUMN2...)
--여기까지 실행 하구 SELECT을 '그 창' 에서 날려보거나, 영향받은 행 갯수 보고 확인, 맞으면
COMMIT
--틀리면
ROLLBACK
너무나 초보스러운 거지만 누군가에겐 도움이 되리라 생각하고 적어본다.
DBMS는 잘하고싶은데 잘하기도 어렵고, 일단 사원으로 있는 동안은
SELECT이나 JOIN해서 제대로 가져오면 다행인거 같다.
장애만 내지말자! 장애만! :)
'일하면서 쌓는 지식 > DB' 카테고리의 다른 글
Delete시 SubQuery 사용 (0) | 2021.02.18 |
---|---|
[MsSQL] Openquery 로 MariaDB에 Insert 해보기 (2) | 2021.01.14 |