'개발 > 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
MS-SQL DB잠겼을때 exec sp_lock 방법 안내

 

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)

 

'개발 > DB' 카테고리의 다른 글

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())
        화요일

 

 

'개발 > DB' 카테고리의 다른 글

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
● table 생성
CREATE TABLE test
(
   고객번호 char(10) NOT NULL,
   성명 varchar(20) NOT NULL,
   점수 int NULL,
   메모 text
)
-------------------------
● table 삭제
DROP TABLE TEST
------------------------
● 필드 추가
ALTER TABLE TEST
ADD 주소 VARCHAR(60) NULL
-----------------------
● 필드 삭제
ALTER TABLE TEST
DROP COLUMN 메모
-----------------------
● 키본키 추가
ALTER TABLE TEST
ADD CONSTRAINT PK_ZIPCODE PRIMARY KEY(ZIPCODE)
-----------------------
● select 문
select 출시일, 제목, 감독
from 테이프
where 출시일 between'1999-1-1'and'1999-12-31'
order by 출시일
---------------------------
● between 문
select 출시일, 제목, 감독
from 테이프
where 출시일 between '1999-1-1' and '1999-12-31'
-------------------------
● in문
where 우편번호 IN("12345","32154")
---------------------------
● insert into
insert into test001
values('1','이경은','100','서울','광진구 자양동')
--------------------------------
● update 문
update 테이프
set 대여여부 = 'y'
where 제목 = '송어'
------------------------------
● join 문
select 고객정보,어쩌구,저쩌구.
from 고객정보 inner join 임대정보 on 고객정보.고객번호 = 임대정보.고객번호
------------------------------
● 중복제거
SELECT DISTINCT au_id
FROM titleauthor
---------------------
● 궁극의 조인
Select  top "& page * PageSize & " a.idx, a.content, a.userid, a.regidate, a.reply, a.photo_img, a.score_function, a.score_design, a.score_price, a.score_satisfaction, a.intnum, a.seq, b.intnum, b.seq, b.filename, b.pkgname  From mStoreReview a inner join istoresb b on a.intnum=b.intnum and a.seq=b.seq order by regidate DESC

 

'개발 > DB' 카테고리의 다른 글

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, ...)

 

자 끝

 

 

'개발 > DB' 카테고리의 다른 글

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

+ Recent posts