블로그 이미지
bedbmsguru

Notice

Recent Comment

Recent Trackback

Archive

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  • 28,005total
  • 6today
  • 6yesterday
2010.11.03 11:27 SQL SERVER

MEMORY

1)Memory
    Available Bytes            System dependent
    Pages/sec             평균값50이하   
    Page Faults/sec Counters    기준값과비교

2)SQL Server:Buffer Manager
    Buffer Cache Hit Ratio        평균값이 90%이상이어야함
    Page Life Expectancy        평균값이 300이상
    Checkpoint Pages/sec        평균값이 30이하
    Lazy writes/sec            평균값이 20이하

3)SQL Server:Memory Manager
    Memory Grants Pending        평균값이 0이어야 함
    Target Server Memory (KB)     물리적메모리와 비슷해야함
    Total Server Memory (KB)    Targer Memory와 비슷해야함


DISK
% Disk Time             평균값이 85% 이하여야함
Current Disk Queue Length    디스크당 평균값이 2 이하여야함
Disk Transfers/sec        디스크당 최고값이 100 이하여야함
Disk Bytes/sec            초당최고값이 10MB 이하여야함
Avg. Disk Sec/Read         평균값이 10ms 이하여야함
Avg. Disk Sec/Write        평균값이 10ms 이하여야함


Processor

% Processor Time         평균값이 80% 이하여야함
% Privileged Time        평균값이 10% 이하여야함
Processor Queue Length        평균값이  2 이하여야함
Context Switches/sec        평균값이 1000 이하여야함
Batch Requests/sec       
SQL Compilations/sec        평균값이 100 이상이어야함
SQL Recompilations/sec
저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:26 SQL SERVER

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

SQL SERVER Performance 체크 항목  (0) 2010.11.03
성능모니터(perfmon)에서 체크해야될 사항  (0) 2010.11.03
메모리 병목현상 체크  (0) 2010.11.03
Unique Index VS Unique Constraint  (0) 2010.11.03
좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:25 SQL SERVER

A

Add Unique Constraint
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]

Add Unique Index
CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]


Unique Index와 Unique constraint 는 내부적으로 같은 방법을 사용한다.

Unique constraint 도 unique index를 만들어서 중복을 막는다.



Unique Index와 Unique Constraint의 차이는 Unique Index가 fillfactor를 지정할 수 있다는 점이다.

d

Add Unique Constraint
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]

Add Unique Index
CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]


Unique Index와 Unique constraint 는 내부적으로 같은 방법을 사용한다.

Unique constraint 도 unique index를 만들어서 중복을 막는다.



Unique Index와 Unique Constraint의 차이는 Unique Index가 fillfactor를 지정할 수 있다는 점이다.

Add Unique Constraint
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]

Add Unique Index
CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]


Unique Index와 Unique constraint 는 내부적으로 같은 방법을 사용한다.

Unique constraint 도 unique index를 만들어서 중복을 막는다.



Unique Index와 Unique Constraint의 차이는 Unique Index가 fillfactor를 지정할 수 있다는 점이다.

d Unique Constraint
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]

Add Unique Index
CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]


Unique Index와 Unique constraint 는 내부적으로 같은 방법을 사용한다.

Unique constraint 도 unique index를 만들어서 중복을 막는다.



Unique Index와 Unique Constraint의 차이는 Unique Index가 fillfactor를 지정할 수 있다는 점이다.


Add Unique Constraint
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]

Add Unique Index
CREATE UNIQUE NONCLUSTERED INDEX
<namingconventionconstraint> ON dbo.<tablename>
(
<columnname>
) ON [PRIMARY]


Unique Index와 Unique constraint 는 내부적으로 같은 방법을 사용한다.

Unique constraint 도 unique index를 만들어서 중복을 막는다.



Unique Index와 Unique Constraint의 차이는 Unique Index가 fillfactor를 지정할 수 있다는 점이다.

저작자 표시
신고
posted by bedbmsguru
2010.11.03 11:25 SQL SERVER

exec 프로시저이름 을 하게 되면 프로시저를 batch의 중간에서도 실행가능하다.
exec가 없을경우 다른 쿼리와 함께 실행해야할 경우 문장의 제일 처음에 procedure가  와야 한다.

1.가독성을 높이기 위해 SQL키워드는  대문자로 작성한다.

2.문법은 ANSI 92에 맞춰서 작성한다

3.가능한한 변수는 적게 사용한다.
Cash를 절약할 수 있다.
4.다이나믹 SQL은 실행시 마다 다시 컴파일을 하게 되므로 적게 사용하는 것이 좋다.
Ex)     SELECT * FROM mydb.dbo.emp where empid = @ei <--다이나믹 쿼리 아님 @ei(파라미터)
    SELECT * FROM emp where empid = " + @eid <-- 다이나믹 쿼리

6.SET NOCOUNT ON 해둘것
    X개의 행이 업데이트 되었습니다 라는 결과값 출력
    추가적인 네트워크 트래픽을 발생시켜서 프로시저가 자주호출될때 성능에 영향을 끼침

7.sp_ 로 시작하도록 작성하지말것
    sp_는 시스템 저장 프로시저이기 때문에 sp_로 시작하는 프로시저는
    master디비를 조회하는 추가적 부담이 발생하고 만약 master디비에 같은 이름의
    프로시저가 있다면 이용자가 작성한 프로시저는 실행되지 않는다.

8. sp_executeSQL and the KEEPFIXED PLAN options
    다이나믹 쿼리엣 프로시저를 다시 컴파일 하지 않도록 한다.

9. 변수값을 저장할때는 하나의 select가 여러개의 set보다 낫다.
    SELECT @Var1 = @Var1 + 1, @Var2 = @Var2 - 1 <--이런식으로 사용할 것
    --안좋은 방법
    SET @Var1 = @Var1 + 1
    SET @Var2 = @Var2 - 1

10. Where 필터링시 성능순서 --> (  =, >, <, >=, <=, <>, !=, !>, !< )
    가장왼쪽이 가장 성능이 좋음

11. boolean형 비교는 in 이나 not in 보다 exists 나 not exists를 사용할것
    exist는 boolean형으로 비교하나 in은 일단 조건에 해당하는 모든값을 가져온다.

12. CONVERT 대신에 CAST를 사용하라.
    CAST가 ANSI-92표준이다. CONVERT는 MSSQL에서만 사용한다.
    Datetime에서 형식을 지정해줄때는 Convert를 사용하라 CAST로는 불가능하다.

13. 필요하지 않다면 DISTINCT나 ORDER BY를 사용하지 마라
    DBMS 퍼포먼스에 오버헤드가 발생한다.

14. CURSOR 사용은 피하라

15. SELECT 시에 필요한 칼럼만 지정하고 * 를 사용하지 마라

16. CREATE TABLE vs. SELECT INTO
    데이타가 적은 테이블에 대해서는 관계가 없지만 데이타가 많은 테이블에 대해서
    SELECT INTO 쿼리를 날리게 되면 tempdb에 에 있는 sysobjects, syscolumns, sysindexes 에 대해 Exclusive lock을 잡고    있기 때문에 tempdb의 sysobjects, syscolumns, sysindexes     를 사용해야 하는 다른쿼리들이 느려지게 된다
왜냐하면 SELECT INTO가 데이타 뿐만 아니라    테이블 스키마도 복사하기 때문이다.

17.임시테이블 대신 테이블 변수를 활용하라
    임시테이블은 프로시저를 다시 컴파일 하지만 테이블 변수는  프로시저를 다시 컴파일 하지
    않는다.

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

메모리 병목현상 체크  (0) 2010.11.03
Unique Index VS Unique Constraint  (0) 2010.11.03
좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:24 SQL SERVER

트리거(TRIGGER)

데이타 베이스 서버에서 특정 이벤트의 결과로 자동으로 수행되는 루틴
트리거는 트랜잭션의 일부로 트리거가 완료 되어야 트랜잭션도 왼료된것이다.
트리거에서 롤백이 일어날경우 트리거뿐만 아니라 원 트랜잭션도 롤백시킴
트리거를 사용해서 무결성 강화를 하는 것보다 제약조건을 통해서 무결성
강화를 할 수 있다면 제약조건을 통해서 하는편이 더 좋음

AFTER 트리거
SQL 명령이 수행된 후에 실행되는 트리거

1.Permanent Table에서만 생성가능 (VIEW나 임시테이블에서는 불가능)
2.테이블에 정의된 제약조건이 변경또는 취소되면 트리거는 작동하지 않음
   실행시 행단위가 아닌 하나의 문장 단위로 호출
3.즉 쿼리가 실행되었을때 몇개의 행이 영향을 받았느냐에 관계없이 한번만 실행됨
4.여러개의 Trigger가 존재할 경우 Trigger 들은 순차적으로 하나씩 실행된다.
  처음과 마지막에 실행될 Trigger 는 sp_settriggerorder로정할수 있지만
  그 이외의 Trigger들은 순서를 정할 수 없다.

Inserted 와 deleted

새로 변경될 이미지와 삭제되기전 이미지를 가지고 있는 특수 테이블
테이블의 스키마는 Trigger가 정의된 테이블과 같은 구조를 가진다.

SQL2000에서는 트랜잭션로그를 이용한 VIEW였기 때문에 집중적인 Trigger 작업은 트랜잭션 로그의 병목현상을 유발할 수 있었음
SQL2005에서는 tempdb의 row versioning 으로 구현하여 트랜잭션 병목현상은 없으나 tempdb의 부하를 유발할 수 있다.

@@rowcount 를 이용해서 몇개의 행이 영향을 받았는지 확인하고 이에 따라 분기 처리가 가능하다.

Ex) CREATE TRIGGER TR_TEST ON TABLE1 AFTER INSERT
    AS
    (
    SET @rc = @@rowcount;
         if @rc = 0 --영향 받는 행이 없음
       RETURN
    if @rc = 1   --단일행
    begin
     작업처리
    end
   
    if @rc > 1   
    begin
      작업처리
    end
     )
CF) AFTER Trigger를 정의하기위해서는 AFTER 이외에도 FOR 를 사용할 수도 있다.

트리거 (비)활성화
Alter TABLE 테이블이름  ENABLE TRIGGER 트리거이름  --활성화
Alter TABLE 테이블이름  DISABLE TRIGGER 트리거이름 --비활성화


트리거의 중첩(Nested)및 재귀(Recursive)
중첩: 한트리거가 호출된 결과로 다른 트리거가 호출
재귀: 트리거가 자기자신을 직접하출 하든지 다른 트리거를 통해서 자기 자신이 계속 호출될때

재귀는 무한루프를 방지하기 위해서 32단계까지만 지원(32는하드코딩되어있음)한다 33번째 재귀호출을 할려고 하면 모든 작업이 롤백된다

UPDATE함수및 COLUMNS_UPDATED

1.Update함수
특정 column이 업데이트 되었는가를 확인할때 사용하는 방법
if Update(칼럼) --특정 칼럼 한개가 업데이트 되었는지 확인

2.COLUMNS_UPDATE 함수 다시 잘 볼것
각각의 칼럼을 bit로 가지는 이진문자열 반환 칼럼이 변경된경우 1 그렇지 않은경우 0 설정
칼럼의 순서는 왼쪽에서 오른쪽 가장왼쪽 byte는 처음8개의 칼럼 (1~8까지) 두번째는 그다음 8개의칼럼(9~16)
 

INSTEAD OF 트리거
대상 개체에 일어나야 할 원래의 변경작업 대신에 수행된다.(대상개체의 변경작업이 일어나지 않으므로 BEFORE 트리거가 아니다.)
INSTEAD OF 트리거에서 inserted나 deleted 테이블은 변경되어야 할 데이타를 담고 있다.
뷰에서도 생성이가능하고 재귀호출을 허용하지 않는다.


DDL트리거
데이타베이스에서 일어나는 DDL이벤트에 대해 반응
규칙에 맞지 않는 스키마의 변경을 롤백하거나 스키마의 변경을 감시할 수 있다.
(AFTER트리거만 지원)

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

Unique Index VS Unique Constraint  (0) 2010.11.03
좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 11:24 SQL SERVER

실행계획이 다시 컴파일 되는 경우

쿼리가 참조하는 테이블의 스키마가 변경되는 경우
쿼리가 참조하는 인덱스가 변경되거나 없어지는 경우
쿼리가 참조하는 통계정보가 업데이트 되는경우
sp_recompile 메소드가 호출되는 경우
트리거가 있는 테이블에 상당한 양의 insert나 delete가 호출되는 경우
하나릐 쿼리에 DDL과 DML이 같이 포함되어 있는 경우
쿼리에서 set 옵션을 변경하는경우
클라인트쪽 커서를 사용하고 있는데 FOR BROWSE 옵션이 변경되었을때 (이게 먼말이여.ㅡ.ㅡ)
쿼리에서 커서 옵션을 변경하였을 경우


--Plan Cache 날리는법

DBCC FREEPROCCACHE

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 00:15 SQL SERVER
1. ROW_NUMBER()
SELECT rank() OVER(ORDER BY 칼럼) FROM 테이블
순차적으로 증가되는 값 각 row마다 unique 한 값을 가진다.

2. RANK(), DENSE_RANK()
SELECT rank() OVER([옵션] ORDER BY 칼럼) FROM 테이블
옵션에 partition by를 추가하면 칼럼별로 그룹핑된 순위를 보여준다.
rank()와 dense_rank()의 차이
1  1
2  2
2  2
2  2
5  3
6  4
7  5
.  .
.  .
.  .

3. NTILE()
사용법:NTILE (integer_expression)    OVER ( [ <partition_by_clause> ] < order_by_clause > )

Ex) select col1 ntile(100) OVER ( ORDER BY col3) as myresult FROM T1
myresult 칼럼을 통해 100(integer_expression ) 으로 나눴을때 어느정도에 위치하는지 볼수 있음 (설명하기 어렵다.-_-a)

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 00:12 SQL SERVER

Drived Tables
쿼리로 생성한 일종의 가상테이블 테이블처럼 From절 뒤에 오고 Drived table의 바깥에서만 사용가능하다.

결과에 Alias를 주고 싶을때.
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders) AS D
GROUP BY OrderYear; <--Group by가 Select 리스트 보다 먼저 실행되기 때문에 alias를 주려면 Derived Table을 사용해야함


1:중첩가능 drived table안에 중첩된 Drived Table을 사용가능하다.
2:여러번 참조하고 싶을때는 참조하고 싶을때마다 쿼리를 다시 만들어야 한다 즉 한번 작성된 Drived Table을 다시 이용하는

 것은 불가능하다.

CTE(Common Table Express)
Drived Table과 유사하지만 몇가지 장점이 있음
--------CTE형식------------
WITH cte_name
AS
(
cte_query
)
outer_query_referring to_cte_name;

CTE 는 중첩(nested)이 불가능 하지만 하나의 with문 안에서 multiple CTE가 가능하다.
WITH C1 AS
(
SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders
),
C2 AS
(
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM C1
GROUP BY OrderYear
)
SELECT OrderYear, NumCusts
FROM C2
WHERE NumCusts > 70;
-------------------------------------------------------------
※CTE는Drived Table 과 달리  한번 만들어둔 CTE를 여러번 참조가 가능하다.


 


저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 00:11 SQL SERVER

############ SQL2005버전확인 ################################
SELECT
 @@VERSION AS [@@VERSION]
,  SERVERPROPERTY('ProductVersion') AS ProductVersion
,  SERVERPROPERTY('ProductLevel') AS ProductLevel
GO


############ 데이타베이스특성보기 ################################
select DATABASEPROPERTYEX('ting' , 'IsQuotedIdentifiersEnabled' )
exec sp_MSforeachtable "exec sp_spaceused '?'" -->각 테이블별 용량

############ 모니터링할 것들 ################################
DISK I/O
Processor
Memory
User connections
Network


############ 백업히스토리삭제 #############################
Declare  @PurgeDate datetime
set @PurgeDate = DATEADD(d, -1, CURRENT_TIMESTAMP)
 EXEC msdb..sp_delete_backuphistory @PurgeDate


############ MDF, LDF 복구 ################################
EXEC sp_attach_db AAA,
   'E:\SQLDAT\AAA.MDF',
   'E:\SQLDAT\AAA.LDF'


EXEC sp_attach_db AAA,
   'E:\AAA.MDF',
  'E:\AAA.ldf'


############백업한DB 리스토어################################
RESTORE FILELISTONLY FROM disk = 'c:\AAA.SQLDAT'

RESTORE DATABASE AAA
from disk = 'e:\AAA.SQLDAT'
with MOVE 'AAA_Data' to 'c:\AAA.MDF',
MOVE 'AAA_Log' to 'c:\AAA.LDF'


############로그전달복원################################
--디비복원
RESTORE DATABASE "AAA"
WITH NORECOVERY
--로그복원
restore log "AAA"
 FROM DISK =  'c:\aaa\AAA.TRN' 
with norecovery

--로그복원라스트
restore log "AAA"
 FROM DISK =  'c:\aaa\AAA.TRN' 
with recovery


############ 프로시저 제거와등록 ################################
--제거
sp_dropextendedproc 'xp_cmdshell'

--이름 등록
sp_addextendedproc 'xp_cmdshell' ,  'xplog70.dll'
sp_addextendedproc 'xp_regread' ,  'xpstar.dll'
sp_addextendedproc xp_dirtree,'xpstar.dll' -->맞는지 아닌지 한번 확인해볼것

--보안상 회수해야할 권한
--master database
--확장된 저장형 프로시저 퍼미션 삭제
REVOKE EXECUTE ON xp_regread FROM public
REVOKE EXECUTE ON xp_dirtree FROM public
REVOKE EXECUTE ON xp_instance_regread FROM public
--sp_runwebtask 접근을 통한 web task 실행 권한 획득 방지
REVOKE EXECUTE ON dbo.sp_runwebtask FROM public

############### 단일사용자모드로 접속 #############################
alter database AAA set single_user with ROLLBACK IMMEDIATE
sp_renamedb AAA, AAA_OLD
alter database AAA_OLD set multi_user with ROLLBACK IMMEDIATE
############### 계정만들기 프로시저 #############################
--sa계정으로 해야함
use community2

//로그인만들기 아이디, 암호, 디폴트 디비
sp_addlogin 아이디, 암호, 디폴트 디비

//사용자만들기
create user 사용자 from LOgin 로그인이름

//sysadmin권한을 갖도록 한다.
sp_addsrvrolemember '계정', 'sysadmin'

//db_owner 권한을 준다.
sp_addrolemember  'db_owner', '디비'


--현재 부여한 역할 삭제
sp_droprolemember  'db_owner', 'testUser'

--현재 user삭제
sp_dropuser 'testUser'

--현재 login 삭제
sp_droplogin 'testUser'


############### 속도빠른카운트 #############################
SELECT rows
FROM sysindexes
WHERE id = OBJECT_ID('테이블이름') AND indid < 2

 

############### 모든테이블카운트하기 #############################
sp_MSforeachtable 'select count(*) "?" from ?'

############### 2. 스토어드 프로시져에 대한 파라미터로 테이블 이름을 사용하는 방법
Create proc dbcc_table
    @tabname varchar(30)
    as
    BEGIN
    Exec ("dbcc checktable (" + @tabname + ")")
    END
    go
 
############### 컬럼의선택성체크(낮을수록좋다. #############################
SELECT 1.0 / COUNT(DISTINCT 컬럼명) * 100 FROM 테이블

############### I/O많이 일으키는 순으로 데이타베이스 정리. #############################
WITH DBIO AS
(
SELECT
DB_NAME(IVFS.database_id) AS db,
CASE WHEN MF.type = 1 THEN 'log' ELSE 'data' END AS file_type,
SUM(IVFS.num_of_bytes_read + IVFS.num_of_bytes_written) AS io,
SUM(IVFS.io_stall) AS io_stall
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS IVFS
JOIN sys.master_files AS MF
ON IVFS.database_id = MF.database_id
AND IVFS.file_id = MF.file_id
GROUP BY DB_NAME(IVFS.database_id), MF.type
)
SELECT db, file_type,
CAST(1. * io / (1024 * 1024) AS DECIMAL(12, 2)) AS io_mb,
CAST(io_stall / 1000. AS DECIMAL(12, 2)) AS io_stall_s,
CAST(100. * io_stall / SUM(io_stall) OVER()
AS DECIMAL(10, 2)) AS io_stall_pct,
ROW_NUMBER() OVER(ORDER BY io_stall DESC) AS rn
FROM DBIO
ORDER BY io_stall DESC;
 
############### 숫자칼럼에서 이빨빠진 최초값 구하기 #############################
SELECT
CASE
WHEN NOT EXISTS(SELECT * FROM dbo.T1 WHERE keycol = 1) THEN 1
ELSE (SELECT MIN(keycol + 1)
FROM dbo.T1 AS A
WHERE NOT EXISTS
(SELECT *
FROM dbo.T1 AS B
WHERE B.keycol = A.keycol + 1))
END;

############### 2005에서2000으로 LinkedServer #############################
2000서비스 팩내의 instcat.sql 스크립트 실행

############### LinkedServer 만들기 #############################
EXEC sp_addlinkedserver @server='DEVSERVER',@srvproduct='', -- 연결이름.
@provider='SQLOLEDB', @datasrc='목적지IP'
EXEC sp_addlinkedsrvlogin 'DEVSERVER', 'false', NULL, '아이디', '암호'

############### lock정보 보기 #############################
select request_session_id As spid,
  resource_type  as restype,
  resource_database_id as dbid,
  resource_description as res,
  resource_associated_entity_id as resid,  
  request_mode as mode,
  request_status as status
 from sys.dm_tran_locks

############### Num값으로 증가하는 테이블 만들기 #############################
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 10;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
############################BCP로 데이타 다루기#################################
D:\>bcp "select * from DB이름.dbo.TABLE" queryout d:\test.txt -c -S
서버이름 -U 아이디 -P 암호
--쿼리분석기에서 테이블로 올리기
BULK INSERT mytemp
FROM "d:\test.txt"
WITH (FIRSTROW = 1,ROWTERMINATOR ='\n');
--bcp로 올리기
bcp tempdb.dbo.mytemp in d:\test.txt -c -S 서버이름 -U 아이디-P 암호
bcp "etempdb.dbo.mytemp" in "파일이름" -c -q -S"서버이름" -U"아이디"
-P"암호"
-S : 서버이름을 적습니다.
-U : SQL 서버인증으로 접속할시 계정명을 적습니다.
-P : SQL 서버인증으로 접속할시 암호를 적습니다.
-T : NT인증을 사용하여 접속합니다. 이를 사용하면 -U, -P는 사용하지 않습니다.
-f : 포맷파일의 위치를 지정합니다.
-t : 필드터미네이터라고 부르며 각 컬럼들간의 구분자를 지정합니다.
-r : 로우터미네이더라고 부르며 각 행을 구분짓는 구분자를 지정합니다.
-m : BCP작업이 취소되는 최대 에러갯수를 지정합니다.
-F : 전송이 시작될 첫행의 지시합니다. 기본은 처음부터 입니다.
-L : 전송의 마지막이될 행을 지시합니다. 기본은 맨 마지막 행입니다.
-c : 데이터들을 모두 문자형으로 취급하여 전송합니다.

##############################2005랜덤 데이타 뽑기##############################
단, 테이블 자체를 저장하는 페이지 단위로 추출하기 때문에 대량을 레코드가 있을 시에만 효과적
select * from  테이블 tablesample(0.2 percent)

##############################특정SPID가 날린 쿼리확인##############################
dbcc inputbuffer(SPID)

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru

티스토리 툴바