블로그 이미지
보미아빠

카테고리

보미아빠, 석이 (532)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2025.11
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

공지사항

최근에 올라온 글

lock 의 이해

카테고리 없음 / 2013. 3. 4. 23:38

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

 

Posted by 보미아빠
, |


소고기다! 정말맛있어요~~~♥
Posted by 보미아빠
, |


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

 

이거나 마찬가지

Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함