CS/DB
-
[Database] - Hash index / B-Tree indexCS/DB 2022. 10. 6. 00:42
Hash index B-tree 만큼 일반적/범용적으로 사용되지는 않지만 고유의 기능과 특성을 가지고 있는 인덱스 오브젝트 입니다. 실제 키 값과 관계없이 인덱스 크기가 작고 검색이 빠르다는 것 입니다. 원래의 값을 저장하는 것이 아닌 해시 함수의 결과만을 저장하게 됨에 따라 키 컬럼 값은 4~8바이트 정도로 작은 길이로 줄어듭니다. Hash된 데이터 값에 따라 저장될 버킷 위치를 정하기 때문에 빠른 속도로 검색 영역을 제한할 수 있다. 버킷의 범위가 작다면 Collision이 발생하게 되어 효율이 떨어지게 됩니다. 해시 인덱스는 정렬되어 있다고 볼 수 없다. 메모리기반의 테이블에 주로 사용된다. 자주 사용되는 데이터를 옵티마이저가 판단하여 해시 키로 만들기 때문에 제어가 어렵다. E.g) Adaptiv..
-
[Database] - Cardinality / Cluster IndexCS/DB 2022. 10. 4. 00:29
Index를 설정할 때 주로 사용하는 Where 조건이나, FK를 Index를 효율적인라는 것은 알 수 있다. 'Student' 라는 Table에 'ID' , 'Name' , 'Phone' 이라는 Column이 존재한다고 가정해봅시다. Index는 'ID' , 'Phone'으로 2개의 Column이 복합적으로 잡혀있다고 하여 봅시다. 당연히 2개를 사용하여 Select하는 것이 제일 좋습니다. 그 다음에는 둘 중 하나라도 Index를 타게 하는것이 좋습니다. 하지만, 그렇다고 하여서 Index 많이 설정하면 좋을까요? 그렇지 않습니다. Index는 DB Memory를 사용하여 Table형태로 별도로 저장됨으로 Index가 많아지면 결국 저장공간과 개수도 비례하여 증가합니다. Index를 설정 어떤 Col..
-
[Database] - IndexCS/DB 2022. 10. 3. 23:09
Index Table Address를 미리 저장하면 Mapping 하여 주는 개념 논리적/물리적으로 테이블과 독립적 Table Scan(Full scan)을 하게 되면 O(N)이 들게 되는데 이를 더 효율적으로 탐색하기 위한 방법 O(LogN) RDBMS에서 검색 속도를 높이기 위함 Index는 B-Tree(Balance Tree) Join, Where에서 Index가 주로 사용되어 쿼리의 검색 속도를 빠르게 하는데 목적을 가진다. Delete,Insert,Update 쿼리에는 Index 사용시 오히려 느리다. Insert Block에 여유가 없다면, 새로운 Block 할당 후 Key 옮기는 작업 수행 Index Split 작업 동안, 해당 Block Key 값에 대해 DML이 Blocking -> Wa..
-
Data Lake / Warehouse / MartCS/DB 2022. 9. 19. 18:05
Data Lake 정형 데이터와 비정형 데이터를 모두 볼륨에 저장할 수 있는 중앙 리포지토리입니다 데이터는 일반적으로 먼저 처리되거나 구조화되지 않은 원시 형식으로 저장됩니다 데이터 스트림이 처리되고 도착하는 즉시 분석에 사용할 수 있는 네이티브 스트리밍을 지원합니다. 데이터 레이크는 데이터 스트림이 처리되고 도착하는 즉시 분석에 사용할 수 있는 기본 스트리밍을 지원합니다. E.g) Kafka, Hadoop, Spark Data Warehouse 모든 데이터를 함께 가져와 구조화된 방식으로 저장합니다. 일반적으로 이기종 소스의 데이터를 연결하고 분석하는 데 사용됩니다. 고성능 SQL(Structured Query Language) 작업을 지원하기 위해 데이터 구조에 의존합니다. 데이터를 저장하기 전에 사..
-
INDEX 조각화( Rebuild , Reorganize )CS/DB 2022. 3. 4. 19:12
PAGE SPLIT INSET , UPDATE 동작이 발생 시 여유 공간의 부족으로 페이지 변화가 일어나는 것 저번에 올린 부분과 같이 PAGE = SQL Server 기본 I/O 단위 / 1Page = 8KB = 8016byte / 8page = 1Extent CREATE TABLE PageSplitTest ( --int: 4byte / --nchar(1000) 2,000byte Id int not null , TextChar nchar(1000) not null ) GO --클러스터형 인덱스 생성 CREATE CLUSTERED INDEX CL_ID ON PageSplitTest (Id) GO --하나의 row당 4 + 2000 = 2,004byte --1Page(8KB) = 8192byte --4개의..
-
sp_WhoIsActive ( 서버 부하 및 락 관련 )CS/DB 2022. 2. 28. 02:36
sp_WhoIsActive 매번 장애는 발생하는데.. 실 서비스 때문에 이슈를 파악하기에는 시간이 없고 바로 서버 전환하여 재부팅하기 일수였다. 이런 문제를 해결하기 위해 저장하면 좋겠다고 하여서 찾아보니 위와 같은 SP 가 존재하였다. sp_who2 sp_WhoIsActive -- https://m.blog.naver.com/stonefly2001/221850646532 /* Test 용도 - Lock drop table tblx go begin tran create table tblx (idx int) waitfor delay '15:55:08.700' insert into tblx values ( 1) commit tran */ /* step1) table setting exec sp_help wh..
-
DB INDEXCS/DB 2022. 2. 28. 00:58
개발을 하면서 생각보다 조회 자체로도 서버 부하에 큰 영향을 준다는 점을 알았습니다. 테스트 서버와 달리 실서버 수십만건의 결제 데이터 조회 시 서버에 부하를 일으켰습니다. 기존 서비스들이 무분별한 확장만 추구하였을 뿐 어느 누구도 서비스의 질을 생각하지 않아 속도가 느려지며 부하가 발생하여 데드락이 발생하여 점점 서비스에 영향이 갔습니다. PAGE란? 데이터 파일을 구성하는 논리 단위 SQL Server의 기본 데이터 저장 단위(8KB) 데이터를 쓸 때 행을 페이지에 기록됨 데이터를 읽을 때 페이지 내의 모든 행이 읽어짐 페이지 내의 행이 많을 수록 I/O 효율 증가 INDEX란? 추가적인 쓰기 작업과 저장 공간을 활용하여 DB 테이블의 검색 속도를 향상시키기 위한 자료구조 장점 빠른 데이터를 검색 (..