'보미아빠, 석이'에 해당되는 글 530건
- 2013.03.22 sitelist
- 2013.03.22 MEMORYCLERK_SQLGENERAL 이 많이 쓰고 있는데요? 이넘이 뭔가요?
- 2013.03.20 이름.......정말.......
- 2013.03.19 링크드서버 에서의 nolock 힌트
- 2013.03.16 windows 2008 이상에서의 SynAttackProtect 레지스터리 설정
- 2013.03.16 Breaking Down 18065 2
- 2013.03.16 Temp table caching improvement for table valued parameters in SQL Server 2012 1
- 2013.03.04 lock 의 이해
- 2013.02.23 경찰대 착한고기 1
- 2013.02.18 multi column count(distinct) 한번만 읽고 처리하기 1
MEMORYCLERK_SQLGENERAL 이 많이 쓰고 있는데요? 이넘이 뭔가요?
세상엔 똑똑한 사람이 많네........DMV 도 좋고~
결국은 메모리 leak 이 나고 있었고, 그로인해 컴파일이 계속되는 현상이 일어났음...
리부팅 후 현상이 사라졌다고 함.
패치를 하세용~ 패치~
http://support.microsoft.com/kb/2778088
SELECT cast(sum(pages_in_bytes)/1024./1024 as int) sizeMB, MO.TYPE, MC.TYPE
FROM SYS.DM_OS_MEMORY_OBJECTS MO
JOIN SYS.DM_OS_MEMORY_CLERKS MC
ON MO.PAGE_ALLOCATOR_ADDRESS=MC.PAGE_ALLOCATOR_ADDRESS
GROUP BY MO.TYPE, MC.TYPE
HAVING MC.TYPE = 'MEMORYCLERK_SQLGENERAL'
ORDER BY 1 DESC;
sizeMB TYPE TYPE
3 MEMOBJ_RESOURCE MEMORYCLERK_SQLGENERAL
3 MEMOBJ_SQLTRACE MEMORYCLERK_SQLGENERAL
0 MEMOBJ_EXCHANGEPORTS MEMORYCLERK_SQLGENERAL
0 MEMOBJ_EXCHANGEXID MEMORYCLERK_SQLGENERAL
0 MEMOBJ_METADATADB MEMORYCLERK_SQLGENERAL
0 MEMOBJ_SECURITY MEMORYCLERK_SQLGENERAL
0 MEMOBJ_SCTCLEANUP MEMORYCLERK_SQLGENERAL
0 MEMOBJ_RULETABLEGLOBAL MEMORYCLERK_SQLGENERAL
0 MEMOBJ_REPLICATION MEMORYCLERK_SQLGENERAL
0 MEMOBJ_EVENTSUBSYSTEM MEMORYCLERK_SQLGENERAL
0 MEMOBJ_GLOBALPMO MEMORYCLERK_SQLGENERAL
0 MEMOBJ_AUDIT_MGR MEMORYCLERK_SQLGENERAL
0 MEMOBJ_FULLTEXTGLOBAL MEMORYCLERK_SQLGENERAL
0 MEMOBJ_REMOTESESSIONCACHE MEMORYCLERK_SQLGENERAL
0 MEMOBJ_RESOURCESUBPROCESSDESCRIPTOR MEMORYCLERK_SQLGENERAL
0 MEMOBJ_ASYNCHSTATS MEMORYCLERK_SQLGENERAL
0 MEMOBJ_DIAGNOSTIC MEMORYCLERK_SQLGENERAL
0 MEMOBJ_SYNCPOINT MEMORYCLERK_SQLGENERAL
SELECT TOP(20) [TYPE], SUM(PAGES_KB) AS [SPA MEM, KB]
FROM SYS.DM_OS_MEMORY_CLERKS
GROUP BY [TYPE]
WITH ROLLUP
ORDER BY SUM(PAGES_KB) DESC;
SELECT cast(sum(pages_in_bytes)/1024./1024 as int) sizeMB, MO.TYPE, MC.TYPE
FROM SYS.DM_OS_MEMORY_OBJECTS MO
JOIN SYS.DM_OS_MEMORY_CLERKS MC
ON MO.PAGE_ALLOCATOR_ADDRESS=MC.PAGE_ALLOCATOR_ADDRESS
GROUP BY MO.TYPE, MC.TYPE
ORDER BY 1 DESC;
dbcc traceon (3604)
dbcc tracestatus (-1)
이름.......정말.......
http://www.sqlskills.com/blogs/paul/how-are-auto-created-column-statistics-names-generated/
누가 이 룰을 따라 복합키 통계를 수동으로 만들었다..........난..이게 버전이 좋아지면서 자동으로 만들었나..생각했다.
-_- 이름 잘 지어라....
링크드서버 에서의 nolock 힌트
공급자에 따라 동작이 틀리다.
1. 공급자에 따라 with (nolock) 힌트가 먹는 경우도 있고 아닌 경우도 있다.
예를들어 Microsoft OLE DB Provider for SQL Server 의 경우,
with (nolock) 이 전달되어 정상적으로 동작 합니다.
또한 Transaction isolation level read uncommitted 도 동작 합니다.
-- server,ip 로 적던지 sqlservermanager10 에서 별칭으로 등록한 이름을 적도록 한다.
32, 64비트 모든 클라이언트가 정상 동작하기 위해서는 별칭을 모두 등록 하도록 한다.
ex1)
EXEC master.dbo.sp_addlinkedserver @server = N'yourip,port', @srvproduct=N'SQL Server'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'yourip,port',@useself=N'False',@locallogin=NULL,@rmtuser=N'id',@rmtpassword='pass'
2. 그러나 Microsoft OLEDB Provider for ODBC Driver 의 경우,
with (nolock) 이 전달되지 않습니다.
역시 Tran........uncommitted 도 동작하지 않습니다.
이 경우 work-around 로 linked server 대상 서버에 view 를 만들고 view 에 nolock 힌트를 명시하면 가능 합니다.
ex2)
EXEC master.dbo.sp_addlinkedserver @server = N'test2', @srvproduct=N' ', @provider=N'MSDASQL', @provstr=N'Driver={SQL Server};Database=master;Server=yourip,port;UID=id;PWD=pass;'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'test2',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
아래는 일반 링크드 서버 생성 쿼리
EXEC master.dbo.sp_addlinkedserver @server = N'a', @srvproduct=N'',@provider = 'sqlncli',@datasrc = '127.0.0.1,14333'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'a',@useself=N'False',@locallogin=NULL,@rmtuser=N'아이디',@rmtpassword='암호'
windows 2008 이상에서의 SynAttackProtect 레지스터리 설정
http://support.microsoft.com/kb/970406
모 MVP 님께서 2008 에도 synAttackProtect 를 설정해야 한다고 강의를 했다고 한다.
이는 잘못된 정보인듯 하다.
참고로 강모 MVP 는 아니란다....^^;;
Note The SynAttackProtect registry key is not applicable on Windows Server 2008, Windows Vista, and later Windows versions. For a list of the registry keys on these operating systems, visit the following link:
TCP/IP Registry Values for Microsoft Windows Vista and Windows Server 2008
Breaking Down 18065
음 대부분의 회사에서 connection pool 을 쓰면서 저 에러를 많이 보았을것 같다.
정상적인 시나리오에서 언제 이런 에러가 발생할 수 있는지 설명했으며,
이 에러를 보이지 않게 감추는 hotfix 를 발표 했다.
그래도 여전히 dm_os_ring_buffer 에서는 확인 할 수 있다.
시원하다......아쒸 돌팔이들 약 열라 팔던데....이제 시원하게 설명 되는구나...
Temp table caching improvement for table valued parameters in SQL Server 2012
2012 부터 TVP 부터는 템프테이블을 캐싱해서 성능이 많이 좋아 집니다.
2008, 2008 R2 에서는 프로시저로 TVP 파라미터로 받으면, 캐시해서 쓰지 못했습니다.
그런데 2012에서는 잘 됩니다.
게임과 인터넷 게시판에서는 이제 SQL Server 가 없어지는 추세 입니다.
이 비싼 SQL Server 를 게임을 위해.......인터넷 게시판을 위해서는 쓸 수 없다는 것이죠.
동감 합니다.
라이선스를 싸게하고 캐시팜 기능을 빨리넣어주면 살아남을수도 있을건데......아쉽습니다.
http://support.microsoft.com/kb/224453
begin tran a1111
이라고 적고 시작하면 나중에 로그 깔때 편함~
--tran의 최초 시작자 짐작
select transaction_id, * from sys.dm_tran_active_transactions where transaction_type <> 2
--1593679
--정보확인
--select * from sys.dm_tran_locks where request_owner_id = 1593679
--로그레코드 확인
select database_transaction_begin_lsn, * from sys.dm_tran_database_transactions where transaction_id = 1593679
729000000293200001
729 0000002932 00001 =10진수
8char 8char 4char 로 변환 binary
'000002D9:00000B74:0001'
729 0000002944 00007
000002D9:00000b80:0007
729 0000002944 00011
000002D9:00000b80:000b
rowlog contents 0 = 이전값
rowlog contents 1 = 이후값
0x0101000C0000782E501500000102000402030004
0x3000140001000000E10CF400EA9D00002A000000050000020028003700446F6E2774205061
select top 10 * from fn_dblog(null, null) where [Current LSN] >= '000002D9:00000B74:0001'
description 에 transaction 이름 나옴 a1111;0x010500000000000515000000c64261d7fedf1e8e80857abae8030000
select * from sys.dm_tran_database_transactions where transaction_id =
1580558
database_transaction_begin_lsn
729000000293200001
2d9:00000B74:0001
729
0000002932
00001
select * from dbo.dm_tran_session_transactions_20130305_064712
So 0000009d:0000021e:0001 becomes '157' + '0000000542' + '00001' = '157000000054200001'.
select top 10 * from fn_dblog(null, null) where [Current LSN] >= '000002D9:00000B74:0001'
0x0101000C0000782E501500000102000402030004
multi column count(distinct) 한번만 읽고 처리하기
IF OBJECT_ID ('TBLA') IS NOT NULL
DROP TABLE DBO.TBLA;
GO
CREATE TABLE DBO.TBLA (COL1 INT, COL2 INT, COL3 INT);
GO
INSERT DBO.TBLA
SELECT TOP 100000 A.ID, B.ID, C.ID
FROM SYS.SYSOBJECTS A, SYS.SYSOBJECTS B , SYS.SYSOBJECTS C
GO
SELECT COUNT(DISTINCT COL1), COUNT(DISTINCT COL2)
FROM DBO.TBLA
GO
SELECT COUNT(C1), COUNT(C2)
FROM (
SELECT DISTINCT
CASE WHEN CP=1 THEN COL1 ELSE NULL END C1
, CASE WHEN CP=2 THEN COL2 ELSE NULL END C2
FROM DBO.TBLA
INNER LOOP JOIN (SELECT 1 'CP' UNION ALL SELECT 2) B
ON 1=1
) A
OPTION (QUERYTRACEON 8649)
우린 cpu 가 남아 돌구요 i/o 는 영 비리 비리 해서........꼭 한번만 읽어서 처리하고 싶어요...
그러나 sql server 는 멀티컬럼 count(distinct) 는 spool 없이 처리하지 못합니다. spool 이 생기면 serial 처리가 되고....
이런게 가능은 하지만 worktable 을 만들어 씀 (ssd 에 있다고 하고,,,, ㅋㅋㅋ) 혹은 ram disk?
실제 데이터가 엄청 크고, count(distinct a), count(distinct a) 의 종류가 많지 않을때는 아래 쿼리가 훨씬 유리해 보인다.
select COUNT(col1), COUNT(col2)
from (
select col1, col2
from dbo.tbla
group by grouping sets ((col1), (col2))
) a
go
그러나, 각각의 컬럼에 인덱스가 있다면, 쌈빡하게 품.....그건
SELECT COUNT(DISTINCT COL1), COUNT(DISTINCT COL2)
FROM DBO.TBLA
이거나 마찬가지