'개발 > DB' 카테고리의 다른 글
SET ANSI_NULLS (0) | 2015.03.05 |
---|---|
MS SQL 저장 프로시저 (0) | 2015.03.02 |
MS-SQL DB잠겼을때 exec sp_lock 방법 안내 (0) | 2015.01.13 |
날짜 쿼리 (0) | 2014.06.12 |
DB 쿼리 기초 (0) | 2014.06.12 |
SET ANSI_NULLS (0) | 2015.03.05 |
---|---|
MS SQL 저장 프로시저 (0) | 2015.03.02 |
MS-SQL DB잠겼을때 exec sp_lock 방법 안내 (0) | 2015.01.13 |
날짜 쿼리 (0) | 2014.06.12 |
DB 쿼리 기초 (0) | 2014.06.12 |
DB가 갑자기 느려졌을 경우에 확인 할 수 있는 방법 중 하나 입니다.
우선적으로
잠기는 종류가 크게 두가지로 나뉩니다.
공유잠금(shared lock)과 배타적 잠금(exclusive lock) 으로 나뉘어요.
전 lock 프로시저를 활용하는 방법으로 안내 해드리겠습니다.
아래와 같이 exec sp_lock 쿼리로 lock 정보를 확인하실 수 있습니다.
보통 spid 가 중복으로 여러개 붙은 것들은 kill 해주시면 되긴하지만
MODE의 값을 확인하고 KILL 시키면 더 좋겠죠?
1. 아래 컬럼값들에 대해 설명 해드리도록 하겠습니다.
SPID
->잠금을 요청하는 프로세스의 세션ID
DBID
-> 데이터베이스의 식별번호
OBID
-> 개체의 식별번호
INDLD
-> 인덱스의 식별번호
TYPE
-> 잠금유형
RESOURCE
-> 리소스 식별값
MODE
-> 잠금
STATUS
-> 잠금요청상태
2. MODE 값 상세 설명
S-> 공유 잠금
U-> 업데이트 잠금
X-> 독점 잠금
IS-> 의도 공유
IU-> 의도 업데이트
IX-> 독점 의도
BU-> 대량 업데이트
3. 잠김 값의 수행된 쿼리정보 확인 하는 방법
dbcc inputbuffer (spid)
EventInfo 쿼리 정보 나옴
4. 좀더 정확한 정보를 확인 하는 방법
exec sp_who2 spid
5. 프로시져 죽이는 방법
kill (spid)
[출처] MS-SQL DB잠겼을때 exec sp_lock 방법 안내|작성자 살퀭이
MS SQL 저장 프로시저 (0) | 2015.03.02 |
---|---|
join query image (0) | 2015.01.29 |
날짜 쿼리 (0) | 2014.06.12 |
DB 쿼리 기초 (0) | 2014.06.12 |
결과값의 특정 행만 출력, WITH, ROW_NUMBER() (0) | 2014.06.12 |
1 . GETDATE() 함수 ~~ System 의 현재 설정된 날짜값 반환
SELECT GETDATE()
2009-02-17 11:48:53.873
SELECT GETDATE()+100
2009-05-28 11:49:00.670
2 . CONVERT() 함수 ~~ 결과값의 데이타 타입을 변환
SELECT CONVERT(varchar(30), GETDATE(),100)
02 17 2009 11:49AM
SELECT CONVERT(varchar(30), GETDATE(),101)
02/17/2009
SELECT CONVERT(varchar(30), GETDATE(),102)
2009.02.17
SELECT CONVERT(varchar(30), GETDATE(),103)
17/02/2009
SELECT CONVERT(varchar(30), GETDATE(),104)
17.02.2009
SELECT CONVERT(varchar(30), GETDATE(),105)
17-02-2009
SELECT CONVERT(varchar(30), GETDATE(),106)
17 02 2009
SELECT CONVERT(varchar(30), GETDATE(),107)
02 17, 2009
SELECT CONVERT(varchar(30), GETDATE(),108)
11:49:49
SELECT CONVERT(varchar(30), GETDATE(),109)
02 17 2009 11:49:54:437AM
SELECT CONVERT(varchar(30), GETDATE(),110)
02-17-2009
SELECT CONVERT(varchar(30), GETDATE(),111)
2009/02/17
SELECT CONVERT(varchar(30), GETDATE(),112)
20090217
SELECT CONVERT(varchar(30), GETDATE(),113)
17 02 2009 11:50:24:857
SELECT CONVERT(varchar(30), GETDATE(),114)
11:50:32:217
3 . DATEPART() 함수 ~~ 날짜에서 지정한 날짜형식 부분만 반환
형식: DATEPART(날짜형식, 날짜)
년/월/일/시/분/초/요일을 숫자 형식으로 ...
SELECT DATEPART(yy, GETDATE())
2009
SELECT DATEPART(mm, GETDATE())
2
SELECT DATEPART(dd, GETDATE())
17
SELECT DATEPART(hour, GETDATE())
11
SELECT DATEPART(mi, GETDATE())
50
SELECT DATEPART(ss, GETDATE())
58
SELECT DATEPART(dw, GETDATE())
3
4 . YEAR() , MONTH() , DAY() 함수 ~~ 해당 년,월,일을 각각 반환
형식: YEAR(날짜) , MONTH(날짜) , DAY(날짜)
SELECT YEAR(GETDATE())
2009
SELECT MONTH(GETDATE())
2
SELECT DAY(GETDATE())
17
5 . DATEADD() 함수 ~~ DATEADD함수는 날짜에 지정한 만큼을 ADD
형식: DATEADD(날짜형식, 더할 값, 날짜)
SELECT DATEADD(mm,20,GETDATE())
2010-10-17 11:52:22.920 ~~ 현재날짜에 월에 20을 더한 날짜를 반환
SELECT DATEADD(dd,100,GETDATE())
2009-05-28 11:52:31.653 ~~오늘부터 100일 후의 날짜를 반환
6 . DATEDIFF() 함수 ~~ DATEDIFF함수는 두 날짜사이의 날짜형식에 지정된 부분을 반환
형식: DATEDIFF(날짜형식, 시작 날자, 끝 날짜)
SELECT DATEDIFF(dd,GETDATE(),'3000.1.1') ~~ 현재날짜와 3000.1.1일 일수 반환
361908
SELECT DATEDIFF(MM,GETDATE(),'2010.1.1') ~~ 현재날짜와 2010.1.1일 일수 반환
-11
7 . DATENAME() 함수 ~~ DATENAME함수는 지정한 날짜의 날자형식의 이름으로 반환
형식: DATENAME(날짜형식, 날짜)
SELECT DATENAME(mm,GETDATE())
02
SELECT DATENAME(dd,GETDATE())
17
SELECT DATENAME(dw,GETDATE())
화요일
MS SQL 저장 프로시저 (0) | 2015.03.02 |
---|---|
join query image (0) | 2015.01.29 |
MS-SQL DB잠겼을때 exec sp_lock 방법 안내 (0) | 2015.01.13 |
DB 쿼리 기초 (0) | 2014.06.12 |
결과값의 특정 행만 출력, WITH, ROW_NUMBER() (0) | 2014.06.12 |
MS SQL 저장 프로시저 (0) | 2015.03.02 |
---|---|
join query image (0) | 2015.01.29 |
MS-SQL DB잠겼을때 exec sp_lock 방법 안내 (0) | 2015.01.13 |
날짜 쿼리 (0) | 2014.06.12 |
결과값의 특정 행만 출력, WITH, ROW_NUMBER() (0) | 2014.06.12 |
결과값에서 특정 행만 출력하는 방법이다.
EX)1000개의 결과값에서 100번째 행만 보고 싶다면?
WITH문과 ROW_NUMBER()를 사용해보자
ROW_NUMBER()
OVER()와 함께 쓰이며 정해진 정렬 순서로 행마다 숫자를 매길 수 있다.
ROW_NUMBER() OVER(ORDER BY [정렬할 컬럼명] [DESC OR ASC]) AS '열 컬럼명'
예시) Title, Writer, Price 세 컬럼이 있는 책 목록 테이블에 행 숫자를 매기고 싶다.
SELECT
ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
Title, Writer, Price
FROM Book
결과값
No/ Title / Writer / Price
1 / 바보 / 홍길동 / 2000
2 / 공책 / 자운영 / 4000
3 / 소설 / 소설가 / 6000
....
....
....
자 그럼 이 결과값에 No이라는 컬럼이 들어가보이니 위에 WHERE No = 3 하면 3번째 행만 나올거라고 나는 생각했다!
근데(당연한 얘기지만) 결과값을 테이블로 보지는 않는데다 Book 테이블에는 No 컬럼이 없으므로 에러가 떨어진다.
여기서 WITH문으로 결과값 자체를 임시로 테이블로 인식하게끔 해주어야 한다.
WITH문
위에도 말했듯 결과값을 임시 테이블로 만들어줌
- WITH 임시테이블명 AS
(
SELECT 어찌고 FROM 테이블명
)
자 그럼 BookTemp 라는 No 컬럼이 포함된 임시 테이블을 만들어보고
WHERE문으로 3번째 행만 뽑아내보자.
WITH BookTemp AS
(
SELECT
ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
Title, Writer, Price
FROM Book
)
SELECT *
FROM BookTemp
WHERE No = 3
결과값
No/ Title / Writer / Price
3 / 소설 / 소설가 / 6000
여러개의 결과값을 뽑아내고 싶다면 WHERE문에 IN을 주면 되겠지?
WHERE No in(3, 6, 9, ...)
자 끝
MS SQL 저장 프로시저 (0) | 2015.03.02 |
---|---|
join query image (0) | 2015.01.29 |
MS-SQL DB잠겼을때 exec sp_lock 방법 안내 (0) | 2015.01.13 |
날짜 쿼리 (0) | 2014.06.12 |
DB 쿼리 기초 (0) | 2014.06.12 |