전체 글

신승환의 기술 블로그
DB ARCHITECTURE

sql server 메모리 관리(2) - 가상 어드레스 공간의 관리

프로세스에 할당된 가상 어드레스 공간의 모든 영역은 다음 세개의 상태중 하나의 상태에 있다. 1. COMMITED 2. RESERVED 3. FREE 1.COMMITED 가상 어드레스 공간 내에서 실제로 사용되고 있는 영역이다. 이 영역에 대해서는 윈도우 오퍼레이팅 시스템이 물리메모리의 영역을 할당하고 있다. 즉, 커밋된 상태의 메모리 영역은 물리 메모리에 확보되어 있다. 2.RESERVED 나중의 사용에 대비해서 가상 어드레스 공간의 영역이 예약된 상태이다. 이 상태에서는 물리 메모리는 전혀 할당되어 있지 않다. SQL 서버는 실행 시에 필요 최소한의 영역만은 커밋된(Commited) 상태로 하고 나머지 부분을 예약된(Reserved) 상태로 둔다. 메모리 할당 동작에서 커밋된(Commited) 상태로..

코딩 테스트

백준 4485번 - 녹색 옷 입은 애가 젤다지?

https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 대표적인 다익스트라 알고리즘을 사용하는 문제이다. 행렬의 출발지점으로 부터 시작해서 마지막 지점까지 최대한 적은 비용으로 자취를 구하여 해당 총 비용을 구해주면 된다. 아래와 같은 행렬이 있고 링크가 (0,0) 지점 부터 (2,2) 지점까지 상하좌우로 움직이는데 가장 적은 비용을 지불하면서 도착하는 경로를 구해주면 된다. 여러가지 경로 중 아래의 경로가 존재할 것이다. 링크가 위..

JAVA

[JAVA] StringTokenizer

StringTokenizer 클래스는 문자열을 사용자가 지정한 구분자로 문자열을 쪼개주는 클래스이다. 해당 규칙으로 쪼개어진 문자열을 Token 이라고 부른다. StringTokenizer 클래스는 java > util 패키지 내에 속해있다. 그리하여 해당 클래스를 사용해주려면 import java.util.StringTokenizer; 를 기입해줘야한다. 기본적인 아이디어를 도식화 해보면 아래와 같다. "banana apple mango kiwi" 라는 단어가 있고 해당 문자열을 "*" 로구분하여 나눠준다는 아이디어이다. 즉 결과는 "banana", "apple", "mango", "kiwi" 가 나올 것이다. import java.io.*; import java.util.*; public class ..

SQL Basic

SQL 이란?

1. 이론적 배경 SQL 은 (Structure Query Language) 의 약어로 관계형 데이터베이스 관리 시스템(DBMS) 에 있는 데이터를 쿼리하고 관리하기 위해 설계된 표준 언어이다. RDBMS는 관계형 모델(데이터를 표현하는 의미론적 모델)을 기반으로 하는 데이터베이스 관리 시스템을 말한다. 관계형 모델은 두개의 수학적인 원리. 즉, 집합 이론(Set Theory) 과 술어논리 (Predicate Logic) 을 기반으로 하고 있다. 2. SQL 이란? SQL은 RDBMS에 저장된 데이터를 쿼리하고 관리할 목적으로 설계된, 관계형 모델을 기반으로 하는 ANSI및 ISO 표준 언어이다. SQL은 영어와 상당히 유사한 구조로 매우 논리적인 형태를 띄고 있다. 다른 많은 프로그램에서 명령 형식의 ..

SQL Tuning

인덱스 탐색 효율(SQL server)

인덱스 탐색 과정에 비효율이 있다면 이를 제거하기 위하여 노력해야 한다. 옵티마이저는 인덱스를 수직으로 탐색하고 나서 리프 페이지를 수평으로 읽어 나갈 때 시퀀셜 엑세스 방식을 사용한다. 이 엑세스 방식이 랜덤 엑세스보다 상대적으로 빠르기는 하지만 불필요하게 넓은 범위를 엑세스하면 인덱스 탐색 효율에 문제가 생긴다. 인덱스 탐색 효율을 개선하고자 할 때, 기존 인덱스에 칼럼을 추가하거나 클러스터형 인덱스로 변경하는 등의 방법은 별로 도움되지 않는다. 인덱스 탐색 효율에 큰 영향을 미치는 것은 '인덱스 키 칼럼 순서'와 '검색 조건에 사용된 연산자'이다. 1. 모든 칼럼에 equal 조건을 사용했을 때 아래와 같은 테이블이 존재한다고 가정해보자. ALTER TABLE dbo.TBLINSA_SH_TEST A..

DB ARCHITECTURE

sql server 메모리 관리(1) - 가상 어드레스 공간

윈도우 오퍼레이팅 시스템의 관리하에 동작하는 프로세스(애플리케이션)은 각각 가상 어드레스 공간을 유지하고 있다. 대다수의 경우는 컴퓨터에 탑재되어 있는 메모리의 크기적인 제약으로 인해 프로세스의 전체 가상 어드레스 공간을 그대로 물리 메모리상에 전개하는 것은 힘들다. 따라서 윈도우 오퍼레이팅 시스템이 각 프로세스의 가상 어드레스 공간을 관리하고 필요에 따라서 물리 메모리로 전개하거나 또는 *페이지 파일에 적어 넣는다. 가상 어드레스 공간과 물리 메모리 사이의 관계는 CPU 캐시와 RAM 사이의 관계와 비슷하다. 캐시 메모리는 CPU의 속도와 시스템 메모리(RAM)의 속도 차이에 기인한 문제를 해결하기 위해 CPU 안에 포함되는 작고 빠른 메모리이다. 상대적으로 빠른 CPU 의 속도가 상대적으로 느린 시스..

코딩 테스트

백준 9694번 - 무엇을 아느냐가 아니라 누구를 아느냐가 문제다

https://www.acmicpc.net/problem/9694 9694번: 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 맨위 첫 번째 줄에 T(1 1(1) -> 2(3) -> 4 총 5의 친밀도 점수로 위의 친밀도 점수 7보다 낮은 수치가 된다. 즉, 다익스트라 알고리즘을 사용하여 최소비용을 가지는 경로를 구하면 되는 문제이다. 1.JAVA 를 통한 풀이 import java.io.*; import java.util.*; public class Main { static ArrayList map; static int[] answer; static int[] prev; static int T,N,M; static int INF = Integer.MAX_VALUE; static int CASE = 1; ..

코딩 테스트

백준 7569번 - 토마토

https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 각 격자모양 안에 토마토가 들어있는데, 토마토가 익은 경우 즉 값이 1인 경우에는 하루마다 주위의 토마토를 모두 익게 만든다. 또한 -1은 토마토가 없는 상태이다. 각 층의 상자안에 들어있는 토마토가 모두 익을때까지 소요되는 일수를구하는 문제로 해당 문제는 bfs(Breadth-First Search) 알고리즘을 사용하여 푸는 문제이다. 기존 토마토 문제는 높이를 고려하지 ..

코딩 테스트

백준 7576번 - 토마토

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 각 격자모양 안에 토마토가 들어있는데, 토마토가 익은 경우 즉 값이 1인 경우에는 하루마다 주위의 토마토를 모두익게 만든다. 또한 -1은 토마토가 없는 상태이다. 상자내의 토마토가 모두 익을때까지 소요되는 일수를 구하는 문제로 해당 문제는 BFS(Breadth-First Search) 알고리즘을 사용하여 푸는 문제이다. 해당문제를 해결하는 알고리즘은 아래와 같다. 1. 미로의 ma..

코딩 테스트

백준 16933번 - 벽 부수고 이동하기3

https://www.acmicpc.net/problem/16933 16933번: 벽 부수고 이동하기 3 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net 이번 문제도 벽 부수기 문제의 일종으로 벽을 주어진 횟수만큼 부순다. 단, 낮과 밤이 존재해서 낮에는 벽을 부술 수 있지만, 밤에는 벽을 부술 수 없다. 칸을 이동할때마다 낮과 밤이 순서대로 바뀌고, 만약 이동하지 않은경우에는 머물더라도 낮과 밤이 바뀌게 된다. 해당 문제를 푸는 알고리즘은 아래와 같다. 1. 미로의 map (행렬)을 만들어 탐색준비 2. 미로와..

ssh9308
신승환의 기술 블로그