<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
	<channel>
		<title><![CDATA[CUBRID | Enterprise Open Source DBMS]]></title>
		<link>https://cubrid.com/</link>
		<description><![CDATA[]]></description>
		<language>ko</language>
		<pubDate>Wed, 08 Apr 2026 20:20:16 +0900</pubDate>
		<lastBuildDate>Wed, 08 Apr 2026 20:20:16 +0900</lastBuildDate>
		<generator>XpressEngine</generator>
								<item>
			<title><![CDATA[CloudBeaver Community에서 CUBRID 사용하기]]></title>
			<dc:creator><![CDATA[hwanyseo]]></dc:creator>
			<link>https://www.cubrid.com/blog/3850747</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3850747</guid>
						<comments>https://www.cubrid.com/blog/3850747#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h2&gt;CloudBeaver Community에서 CUBRID 사용하기&lt;/h2&gt;

&lt;p&gt;CloudBeaver는 SQL, NoSQL, 클라우드 데이터베이스를 포함한 다양한 데이터베이스를 지원하며, 웹 브라우저를 통해 모든 데이터베이스에 접근할 수 있습니다.&lt;/p&gt;

&lt;p&gt;팀워크에 최적화된 CloudBeaver는 데이터베이스 작업을 간소화하고 클라우드 기반 환경에서 여러 사용자가 원활하게 협업할 수 있도록 지원합니다.&lt;/p&gt;

&lt;p&gt;간단한 라이브 데모는 아래 URL에서 경험해 볼 수 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://demo.cloudbeaver.io/#/&quot; rel=&quot;nofollow&quot;&gt;https://demo.cloudbeaver.io/#/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;이 글에서는 CloudBeaver Community버전에서&lt;/p&gt;

&lt;p&gt;&lt;strong&gt; 1. CUBRID를 활성화 할 수 있는 Script를 설치하는 방법과&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt; 2. CloudBeaver를 설치 할 수 있는 방법을 간략하게 소개합니다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;참고 URL :&lt;/p&gt;

&lt;div&gt;CUBRID DBEAVER관련 GitHub : &lt;a href=&quot;https://github.com/CUBRID/cubrid-dbeaver-plugins&quot; rel=&quot;nofollow&quot;&gt;https://github.com/CUBRID/cubrid-dbeaver-plugins&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;CloudBeaver Docker Hub : &lt;a href=&quot;https://hub.docker.com/r/dbeaver/cloudbeaver/&quot; rel=&quot;nofollow&quot;&gt;https://hub.docker.com/r/dbeaver/cloudbeaver/&lt;/a&gt;&lt;/div&gt;

&lt;div&gt;CloudBeaver 설치 가이드 : &lt;a href=&quot;https://github.com/dbeaver/cloudbeaver/wiki/CloudBeaver-Community-deployment-from-docker-image&quot; rel=&quot;nofollow&quot;&gt;https://github.com/dbeaver/cloudbeaver/wiki/CloudBeaver-Community-deployment-from-docker-image&lt;/a&gt;&lt;/div&gt;

&lt;div&gt; &lt;/div&gt;

&lt;h3&gt;CloudBeaver Community에서 CUBRID 활성화 하기&lt;/h3&gt;

&lt;p&gt;CUBRID는 CloudBeaver Enterprise버전에서는 활성화 되어 있지만, CloudBeaver Community버전에서는 기본적으로 비활성화 되어 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/CUBRID/cubrid-dbeaver-plugins/releases&quot; rel=&quot;nofollow&quot;&gt;https://github.com/CUBRID/cubrid-dbeaver-plugins/releases&lt;/a&gt;를 공개된 script를 이용해 간단하게 CUBRID를 활성화 할 수 있습니다.&lt;/p&gt;

&lt;p&gt;CloudBeaver Community 버전이 설치되어 있어야 하므로 설치되어 있지 않다면 본 글의 &#039;CloudBeaver Community 설치&#039;를 참고하세요.&lt;/p&gt;

&lt;div&gt; &lt;/div&gt;

&lt;div&gt;1. &lt;a href=&quot;https://github.com/CUBRID/cubrid-dbeaver-plugins/releases&quot; rel=&quot;nofollow&quot;&gt;https://github.com/CUBRID/cubrid-dbeaver-plugins/releases&lt;/a&gt;에서 cubrid-enabler.sh를 다운로드 받습니다.&lt;/div&gt;

&lt;div&gt;2. cubrid-enabler.sh를 Docker container 내부의 /opt/cloudbeaver폴더에 복사합니다.&lt;/div&gt;

&lt;div&gt;(Docker Image를 사용하지 않는 경우 cloudbeaver가 설치된 root 폴더에 복사하면 됩니다.)&lt;/div&gt;

&lt;div&gt; &lt;/div&gt;

&lt;div&gt;
&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;예) docker cp c:\cubrid-enabler.sh (my-container-name):/opt/cloudbeaver&lt;/div&gt;

&lt;p&gt;Docker Desktop UI를 이용하는 경우 컨테이너의 &quot;Files&quot; 탭에서 파일을 우클릭하여 직접 다운로드하거나, 파일을 드래그 앤 드롭하여 업로드할 수도 있습니다.&lt;br /&gt;
 &lt;/p&gt;

&lt;p&gt;3. 복사된 폴더로 이동하여 Script를 실행합니다.&lt;/p&gt;

&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;chmod +x cubrid-enabler.sh  //실행권한이 없는 경우&lt;br /&gt;
./cubrid-enabler.sh&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;
4. 실행 후 아래와 같이 정상적으로 설치완료 메시지를 확인 할 수 있습니다.&lt;/p&gt;

&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;./cubrid-enabler.sh&lt;br /&gt;
Created folder: /opt/cloudbeaver/drivers/cubrid&lt;br /&gt;
CUBRID JDBC driver extracted&lt;br /&gt;
Backup original file: /opt/cloudbeaver/server/plugins/io.cloudbeaver.resources.drivers.base_1.0.141.202603020941.jar&lt;br /&gt;
Backup successful: /opt/cloudbeaver/server/plugins/io.cloudbeaver.resources.drivers.base_1.0.141.202603020941.jar.1773182108.bak&lt;br /&gt;
Bundle replaced successfully&lt;/div&gt;

&lt;p&gt;** 참고 **&lt;/p&gt;

&lt;p&gt;패치 설치 후 문제가 발생될 경우 백업파일(.bak)을 이용하여 원본 파일로 다시 변경 후 재시작하면 됩니다.&lt;/p&gt;

&lt;p&gt;e.g.) cp &lt;span style=&quot;background-color:rgb(250,250,250);font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;&quot;&gt;/opt/cloudbeaver/server/plugins/io.cloudbeaver.resources.drivers.base_1.0.141.202603020941.jar.1773182108.bak &lt;/span&gt;&lt;span style=&quot;background-color:rgb(250,250,250);font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;&quot;&gt;/opt/cloudbeaver/server/plugins/io.cloudbeaver.resources.drivers.base_1.0.141.202603020941.jar&lt;/span&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;5. Docker Container 재부팅 &lt;/p&gt;

&lt;p&gt;아래와 같은 명령어를 통해 Container를 재시작하거나 Docker Desktop 사용자는 UI에서 Container를 재시작합니다.&lt;/p&gt;

&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;docker restart (my-container-name)&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;6. 활성화 확인&lt;/p&gt;

&lt;p&gt;기본 포트인 8978을 사용하는 경우 브라우저에서 ip:8978을 입력하여 CloudBeaver에 접속하여 활성화 상태를 확인 합니다.&lt;/p&gt;

&lt;p&gt;New Connection 메뉴로 이동하면 아래 그림과 같이 CUBRID 활성화가 확인됩니다.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;enable_cubrid.png&quot; src=&quot;https://www.cubrid.com/./files/attach/images/7900/747/850/003/073d8b25c51d99ee13e5c804c10b75fd.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;img alt=&quot;navigator.png&quot; src=&quot;https://www.cubrid.com/./files/attach/images/7900/747/850/003/ed936549b0adcd35506796f55e4a003a.png&quot; /&gt;&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;
&lt;h3&gt;CloudBeaver Community 설치&lt;/h3&gt;

&lt;p&gt;Cloudbeaver Docker Hub에 공개된 정보를 통해 Windows와 Linux에서의 설치 방법을 소개합니다.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;

&lt;div&gt;[Windows]&lt;/div&gt;

&lt;div&gt;
&lt;p&gt;Windows의 경우 Docker Desktop(https://www.docker.com/products/docker-desktop/)설치 후에 &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;1. CloudBeaver Docker Hub에서 [Run in Docker Desktop] 버튼을 클릭하여 간단하게 설치 할 수 있습니다.&lt;/p&gt;

&lt;p&gt;특정 버전을 사용하고 싶은 경우 Tags Tab으로 이동 후 특정 버전의 Run in Docker Desktop 아이콘으로 설치 할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;run_in_docker_desktop.png&quot; src=&quot;https://www.cubrid.com/./files/attach/images/7900/747/850/003/fec3abfff753a9f05150cfa015e14319.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;2. Docker Desktop 실행 팝업이 실행 되고 아래 화면에서 Confirm을 눌러 Image를 Download 받습니다.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;desktop-1.png&quot; src=&quot;https://www.cubrid.com/files/attach/images/7900/747/850/003/50c7287921b77f285ea5965f4a196588.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;3. Container name을 입력하고 Default로 사용할 경우 바로 실행하거나 포트변경예정일 경우 추후 이용할 Port번호를 입력 후 실행을 합니다.&lt;/p&gt;
&lt;img alt=&quot;desktop-2.png&quot; src=&quot;https://www.cubrid.com/./files/attach/images/7900/747/850/003/fc9a676f222751b058407b94dbba85a1.png&quot; /&gt;&lt;p&gt; &lt;/p&gt;

&lt;p&gt;[Linux]&lt;/p&gt;

&lt;p&gt;Linux의 경우 Docker 사용을 위해 docker-ce docker-ce-cli containerd.io가 설치가 필요합니다.&lt;br /&gt;
Docker의 설치 방법은 다양한 정보를 통해 설치가 가능하므로 Cloudbeaver 설치에 대해서만 설명하겠습니다.&lt;br /&gt;&lt;br /&gt;
1. 아래와 같이 command를 이용하여 docker image를 download할 수 있습니다.&lt;/p&gt;

&lt;p&gt;특정 버전을 이용하고자 하는 경우 &#039;:latest&#039; 부분을 &#039;:25.3.5&#039;와 같이 특정 버전으로 변경하여 download 받습니다.&lt;br /&gt;
 &lt;/p&gt;

&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;docker pull dbeaver/cloudbeaver:latest&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;2. Docker Container를 생성 및 실행&lt;/p&gt;

&lt;p&gt;아래와 같은 명령어를 통해 Container 생성 및 실행이 가능합니다.&lt;/p&gt;

&lt;p&gt;-p 옵션의 경우 추후 포트를 변경할 예정이라면 다른 포트를 입력하여야 합니다. CloudBeaver 기본 포트는 8978입니다.&lt;br /&gt;
-v 옵션의 경우 추후 업데이트를 위해 내부 /opt/cloudbeaver/workspace를 Host 저장소(&lt;span style=&quot;background-color:rgb(250,250,250);font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;&quot;&gt;/var/cloudbeaver/workspace)&lt;/span&gt;에 연결하게 되어 docker를 삭제하여도 추후 업데이트시 데이터를 그대로 사용할 수 있습니다. (필요에 따라 위치를 다르게 설정하세요.)&lt;/p&gt;

&lt;p&gt;network등 다른 추가 설정이 필요한 경우 &lt;a href=&quot;https://docs.docker.com/reference/cli/docker/container/run/&quot; rel=&quot;nofollow&quot;&gt;reference site&lt;/a&gt;를 참고하세요.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style=&quot;font-family:&#039;DejaVu Sans Mono&#039;, &#039;Courier New&#039;, Courier, monospace;border:#666 1px dotted;border-left:#2AE 5px solid;padding:5px;background:#fafafa url(&quot;https://www.cubrid.com/modules/editor/components/code_highlighter/component_icon.gif&quot;) no-repeat right top;&quot; title=&quot;&quot;&gt;docker run -d --name (my-container-name) \&lt;br /&gt;
  -p 8978:8978 \&lt;br /&gt;
  -v /var/cloudbeaver/workspace:/opt/cloudbeaver/workspace \&lt;br /&gt;
  --restart always \&lt;br /&gt;
  dbeaver/cloudbeaver:latest&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;]]></description>
						<pubDate>Tue, 17 Mar 2026 15:12:34 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[HA 다중화 구성에서 loadBalance를 활용해 읽기 분산해 보기]]></title>
			<dc:creator><![CDATA[큐브02]]></dc:creator>
			<link>https://www.cubrid.com/blog/3847596</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3847596</guid>
						<comments>https://www.cubrid.com/blog/3847596#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;strong&gt;* HA 다중화 구성에서 loadBalance를 활용해 읽기 분산해 보기&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;먼저, CUBRID HA와 loadBalance를 잘 이해할 수 있도록 CUBRID HA 특징과 CUBRID Broker의 특징에 대해 정리해 본다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;CUBRID HA는 마스터 노드(master node), 슬레이브 노드(slave node), 레플리카 노드(replica node)로 나눌 수 있다.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;마스터 노드 : 액티브 서버를 사용한 &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기, 쓰기 등 모든 서비스를 제공&lt;/span&gt;한다.&lt;/li&gt;
	&lt;li&gt;슬레이브 노드 : 스탠바이 서버를 사용한 &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기 서비스를 제공하며 마스터 노드 장애 시 failover가 일어난다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;레플리카 노드 :&nbsp;스탠바이 서버를 사용한 &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기 서비스를 제공하며 마스터 노드 장애 시 failover가 일어나지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;CUBRID Broker의 ACCESS_MODE는 RW(Read Write), RO(Read Only), SO(Standby Only)로 나눌 수 있다.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;RW : &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기, 쓰기 서비스를 제공&lt;/span&gt;하는 브로커이다. &lt;span style=&quot;color:#FF0000;&quot;&gt;일반적으로 액티브 서버에 연결하며, 연결 가능한 액티브 서버가 없으면 일시적으로 스탠바이 서버에 연결&lt;/span&gt;한다.&lt;/li&gt;
	&lt;li&gt;RO : &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기 서비스를 제공&lt;/span&gt;하는 브로커이다. &lt;span style=&quot;color:#FF0000;&quot;&gt;가능한 스탠바이 서버에 연결하며, 스탠바이 서버가 없으면 액티브 서버에 연결&lt;/span&gt;한다.&lt;/li&gt;
	&lt;li&gt;SO : &lt;span style=&quot;color:#FF0000;&quot;&gt;읽기 서비스를 제공&lt;/span&gt;하는 브로커이다. &lt;span style=&quot;color:#FF0000;&quot;&gt;스탠바이 서버에 연결하며, 스탠바이 서버가 없으면 서비스를 제공하지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이 외에 레플리카로 접속 할 수 있는 파라미터인 REPLICA_ONLY가 존재한다.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;REPLICA_ONLY : 레플리카 서버에 접속된다. 이 때의 ACCESS_MODE 값이 RW이면 레플리카 DB에도 쓰기 작업을 수행할 수 있고 이를 허용하지 않으려면 ACCESS_MODE 값을 RO로 설정해야 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;또한 CUBRID 브로커에서 QUERY의 종류를 구분하지 않기 때문에&nbsp;읽기 부산을 위한 브로커에는 SELECT QUERY 만을 수행해야 한다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;이제 마스터-슬레이브-레플리카로 구성&nbsp;되어 있을 때 loadbalance 읽기 부하 분산을 어떻게 할 수 있을지 살펴본다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/3790689/563/847/003/86ff1a6db4da1399f46b8eee743097d4.jpg&quot; alt=&quot;1.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;위 그림과 같이 마스터 브로커는&nbsp;ACCESS_MODE=RW로 설정하여 기본적으로 마스터에 연결되도록 하고, 슬레이브브로커는&nbsp;ACCESS_MODE=RO로 설정하여 슬레이브에 연결되도록 한다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;(이 때 주의할 점은 마스터, 슬레이브 노드에 부하분산을 위한 브로커는 별도 구성을 해야한다는 점이다. 기본적으로 RW브로커는 마스터, 슬레이브 양 쪽에 구성이 되어 있어야 한다.)&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;레플리카의 경우 REPLICA_ONLY=ON으로 설정하고, ACCESS_MODE=RO로 설정하여 레플리카 서버에만 접속을 허용하되, 쓰기 작업은 허용하지 않는다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;이 때 마스터 노드&nbsp;액티브 서버의 장애 발생으로 DB 프로세스가 Down되면 fail-over가 발생되어 기존의 슬레이브 노드가 마스터 노드로 변경된다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/3790689/563/847/003/af80126a7baa970ebc66ff6b18858ad3.jpg&quot; alt=&quot;5.jpg&quot; style=&quot;&quot; /&gt;위와 같이 기존 마스터 노드였던 1번 서버에 장애가 발생되더라도, 새로운 마스터 서버(기존 슬레이브)로 연결이 되어 서비스가 정상적으로 동작한다.&lt;/p&gt;

&lt;p&gt;이 때 접속량이&nbsp;기존의 두 배로 발생될 수 있기 때문에 이를 고려하여 각 DB의 max_clients를 설정해야 한다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/3790689/563/847/003/2c55db81bf85139369632bc05dbc63dd.jpg&quot; alt=&quot;2.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;위와 같이 기존에 마스터 노드였던&nbsp;1번 서버의 DB 프로세스가 정상적으로 올라온다면, 슬레이브 노드로 상태가 변경되며, 기존 구성과는 브로커-노드가 CROSS(교차)로 연결 된다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;img src=&quot;https://www.cubrid.com/files/attach/images/3790689/563/847/003/308abe070d0531b839346bfd2d5c2f66.jpg&quot; alt=&quot;3.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;다만 이 구성에서 고려해야할 점은 REPLICA_ONLY를 설정해둔 경우 레플리카 노드 외에 다른 노드로는 접속 시도를 하지 않기 때문에 레플리카 노드에 장애가 날 경우 서비스 안정성에 문제가 있을 수 있다는 점이다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/3790689/563/847/003/3d51df30d6a90d96c74fbf45ca7684da.jpg&quot; alt=&quot;4.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;레플리카 노드의 장애에 대비하여 레플리카 노드 역시 다중화 할 수 있다.&lt;/p&gt;

&lt;p&gt;위와 같은 구성에서는 어떤 서버에서 장애가 발생하더라도, 서비스 안정성을 보장할 수 있으며 읽기 부하 분산도 가장 이상적으로 가능하다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;위 구성에서 각 레플리카 노드의 databases.txt 내 db-host는 각각 자신을 우선순위로 두어야 의도에 맞게 사용할 수 있다. REPLICA1의 경우 REPLICA1:REPLICA2로 설정하고, REPLICA2의 경우 REPLICA2:REPLICA1로 설정 하여야 한다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;각 노드의 databases.txt는 아래와 같이 되어야 한다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; width=&quot;636&quot;&gt;
	&lt;tbody&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot; width=&quot;70&quot;&gt;노드&lt;/td&gt;
			&lt;td width=&quot;124&quot;&gt;마스터&lt;/td&gt;
			&lt;td width=&quot;124&quot;&gt;슬레이브&lt;/td&gt;
			&lt;td width=&quot;159&quot;&gt;레플리카1&lt;/td&gt;
			&lt;td width=&quot;159&quot;&gt;레플리카2&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot;&gt;db-host&lt;/td&gt;
			&lt;td&gt;마스터:슬레이브&lt;/td&gt;
			&lt;td&gt;마스터:슬레이브&lt;/td&gt;
			&lt;td&gt;레플리카1:레플리카2&lt;/td&gt;
			&lt;td&gt;레플리카2:레플리카1&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;이렇게 CUBRID HA는 여러가지 구성을 유동적으로 제공하기 때문에 안정성과 성능 모두 만족할 수 있도록&nbsp;각 사이트에 맞는 구성을 고려하면 좋다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;참고 매뉴얼&lt;/p&gt;

&lt;p&gt;- CUBRID HA 구성 형태 :&nbsp;https://www.cubrid.org/manual/ko/11.3/ha.html#id32&lt;/p&gt;

&lt;p&gt;- 브로커 모드 :&nbsp;https://www.cubrid.org/manual/ko/11.3/ha.html#broker-mode&lt;/p&gt;

&lt;p&gt;- HA 관련 환경 설정 :&nbsp;https://www.cubrid.org/manual/ko/11.3/ha.html#ha-configuration&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Tue, 24 Dec 2024 09:35:12 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[DBMS와 효과적인 SQL 처리]]></title>
			<dc:creator><![CDATA[박세훈]]></dc:creator>
			<link>https://www.cubrid.com/blog/3843585</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3843585</guid>
						<comments>https://www.cubrid.com/blog/3843585#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;DBMS는 SQL을 효과적으로 처리하기 위해서 어떠한&nbsp;노력을 하고 있을까요?&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:26px;&quot;&gt;- 질의 재작성기(Query Rewriter)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;여러 개발자에게 동일한 요구사항을 주고 질의를 작성하게 하면&nbsp;서로 다른 형태로 작성할&nbsp;수 있습니다. 질의를 어떻게 작성하느냐에 따라서 성능에 차이가 발생할 수 있기 때문에 개발자가 질의를 효과적으로 작성하는 것은 중요한 일이지만, DBMS가 상당부분 그 일을 대신하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/c280073c2256170e722d52de15c9a902.jpg&quot; alt=&quot;view-merging.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;위 질의를 작성한 그대로 수행하게 되면&nbsp;부질의 결과를 임시파일에 저장하고 그것을 재가공해야 합니다. 하지만 오른쪽 질의처럼 작성되어 있다면, 따로 부질의를 수행해서 저장할 필요도 없고, 인덱스의 사용도 가능합니다. 위와 같이 부질의를 제거하고 주질의에 합병하는 것을 뷰머징이라고 합니다. DBMS는 가능한 경우 뷰머징을 진행하며, 인라인 뷰와 뷰 객체에 대해서도 동일하게 합병을 진행합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/d1398c4bfbd446b51faada8e29d46505.jpg&quot; alt=&quot;predicate-push.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;부질의가 뷰머지가 불가능한 경우에&nbsp;주질의에 있는 조회조건을 부질의로 넣는 것을 predicate push라고 합니다. 조회시&nbsp;스캔하는&nbsp;양을 줄일 수 있기 때문에 상당히 성능을 향상시킬 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/5e37fbac58fd48ab21392f2527e0981e.jpg&quot; alt=&quot;unnecessary.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;필요 없는 select list와 조인 테이블 그리고 order by절등을 제거하여, 필요없는 처리과정을 진행하지 않을 수 있습니다. 해당 항목을 조회 하지 않아도 동일한 결과가&nbsp;보장될 때 제거가 가능합니다. 테이블은 외부 조인되거나 외례키 관계에서&nbsp;조인 조건의 컬럼이 유니크한&nbsp;경우&nbsp;제거가 가능합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/f42de25e0bad0582e73ab951eb128395.jpg&quot; alt=&quot;query_rewrite.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;위에서 소개한 재작성 이외에도 DBMS는 다양한 재작성을 진행합니다. CUBRID는 이러한 재작성된 질의를 실행계획에서&nbsp;직접 확인할 수 있습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:26px;&quot;&gt;- 질의 최적화기(Query Optimizer)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size:14px;&quot;&gt;SQL은 어떻게 데이터를 조회할 것인가에&nbsp;대한 정보를&nbsp;포함하고 있지 않습니다. 질의 최적화기가 이러한 정보인 실행계획을 생성합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/fa8af3a311613c3d1ddc52e6527a8fb1.jpg&quot; alt=&quot;opt1.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;위 질의의 조회조건으로 얼마나 데이터가&nbsp;필터링될지 예측할 수 있을까요? 만약 &#39;COLUMN&#39;의 값이 고유하다면 한건이 조회 될 것이고, 모두 &#39;1&#39;이라면 전체 데이터가 조회 될 것입니다. 이렇게 조회조건을 평가했을 때 전체 데이터 대비 조회되는 양의 비율을 선택도(selectivity)라고 합니다.&nbsp;선택도를 통해서 읽어야하는 페이지수와&nbsp;결과 행수를 예측할 수 있습니다. 예를 들어 &#39;table&#39;의 전체 페이지수는 1000개,&nbsp;데이터 건수는 10,000개이고 조회조건의 선택도가 0.01이면, 읽어야 하는 페이지수는 10개, 결과 행수는 100건으로 예측할 수 있습니다. 비용계산 공식은 스캔 방법에 따라&nbsp;다르고&nbsp;복잡하지만, 기본적인 원리는 선택도를 활용하여 결과 행수와 읽어야 하는 페이지를 예측하는 것입니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/cd967c03dad0125195171e0575c3d37d.jpg&quot; alt=&quot;opt2.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;위와 같이 조인된 질의는 각테이블 별로 분리해서 비용을 산출합니다.&nbsp;첫번째 테이블의 선택도와 전체 페이지수로 비용을 계산하고&nbsp;두번째 테이블역시 같은 방법으로 비용을 산정합니다. nested loop 조인 방법이라면 첫번째 결과 행수만큼 두번째 테이블 조회를 반복하게 됩니다. 이 경우 전체 비용은 첫번째 비용 +&nbsp;(첫번째 행수 * 두번째 비용) 으로 계산할 수 있습니다. 질의 최적화기는 각각&nbsp;테이블 순열의&nbsp;비용을 계산하고, 비교하여 최적의 실행계획을 선택합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/80441af3481e5aacf1b56e07b0d04ba2.jpg&quot; alt=&quot;opt3.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;실행계획을 보면&nbsp;최적화시에 사용된 정보들을 확인할 수 있습니다. 테이블의 전체 건수와 페이지수 그리고 조회조건의 선택도가 얼마인지 확인 할수 있습니다. 실행계획의 card는 cardnality의 약자로 예측되는 결과 행수를 의미합니다. 각각의 정보를 알고 있으면 실행계획을 정확하게 이해하는데&nbsp;도움이 될 것입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:26px;&quot;&gt;- 질의 실행기(Query Executor)&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;질의 실행기에서는 성능 향상을 위해 진행 단계를&nbsp;생략하는 최적화를 진행합니다. 인덱스를 활용하여 정렬과정을 생략하거나 인덱스의 정보만으로도 조회가 가능하면 데이터영역에 접근하는 과정을 생략합니다. 다중 키 범위 최적화와 SORT-LIMIT 최적화와 같이 필요한 양의 데이터만 조회하여 나머지 데이터의 스캔 과정을 생략하기도 합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/585/843/003/e69c63aa94f5c4dde4e5a6a597188428.jpg&quot; alt=&quot;trace.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;span style=&quot;font-size:14px;&quot;&gt;TRACE 정보를 확인하면 질의 실행기가 어떤&nbsp;최적화를 진행했는지 알 수 있습니다. 또한 실제로 읽은 페이지수와 결과 행수도 확인 가능합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:26px;&quot;&gt;- 마치며&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp;DBMS는 성능향상을 위해 다양한 최적화를 진행하고 있으며, 사용자는 실행계획과 TRACE 정보를 통해 이것을 확인할 수 있습니다. CUBRID는 이러한 성능 향상을 위한&nbsp;개선 작업을 지속적으로 진행하고 있습니다. 질의가 더 효과적으로 재작성되도록 다양한 사례의 재작성을 추가하고 보완하였습니다. 효과적인 실행계획을 생성하기 위해서 선택도관련 통계정보의 대상을 인덱스에서 테이블로 확대하고, 규칙기반 최적화는 최소화하는 작업을 진행하고 있습니다.&nbsp;CUBRID는 아직 병렬 질의를 지원하지 않지만 2024년을 목표로 개발을 진행하고 있습니다. 조금씩 꾸준히 사용자 관점에서 개선되는 CUBRID를 기대해 주시기를 바랍니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Fri, 29 Dec 2023 09:13:05 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID Internal: B+ 트리의 노드(=페이지)와 노드 분할 방법]]></title>
			<dc:creator><![CDATA[주영진]]></dc:creator>
			<link>https://www.cubrid.com/blog/3843675</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3843675</guid>
						<comments>https://www.cubrid.com/blog/3843675#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h3&gt;&lt;strong&gt;목차&lt;/strong&gt;&lt;/h3&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1. 개요&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2.&nbsp;B+ 트리의 노드(= 페이지)&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2.1. 오버플로 노드 (BTREE_OVERFLOW_NODE)&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2.2. PAGE_OVERFLOW 페이지&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.&nbsp;노드 분할&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.1.&nbsp;노드 분할이 발생하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.1.1.&nbsp;새로운 키가 입력되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.1.2.&nbsp;기존 키의 크기가 증가하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.1.3.&nbsp;기존 레코드에 테이블 레코드의 OID가 추가되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.1.4.&nbsp;기존 레코드에 MVCC 아이디가 추가되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.2. 사용자가 키를 입력하는 패턴에 따라 달라지는 노드 분할 #1&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.2.1.&nbsp;시나리오 #1 - 1부터 27까지 오름차순으로 증가하는 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.2.2.&nbsp;시나리오 #2 - 1부터 27까지 불규칙 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.2.3.&nbsp;비교 결과&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.&nbsp;똑똑하게 노드 분할하기&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.1.&nbsp;사용자가 키를 입력하는 패턴에 따라 달라지는 노드 분할 #2&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.1.1.&nbsp;오름차순으로 증가하는 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.1.2. 내림차순으로 감소하는 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 120px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.1.3.&nbsp;불규칙 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;5.&nbsp;루트 노드 &rarr; 브랜치 노드 &rarr; 리프 노드 순서의 노드 분할&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;6.&nbsp;참고&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;개요&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;큐브리드는 B+ 트리 인덱스를 사용하고 있습니다. B+ 트리 인덱스는 새로운 키가 입력되거나 기존 레코드가 변경될 때, B+ 트리를 유지하기 위해서 노드의 분할 또는 병합이 발생할 수 있습니다. 노드는 B+ 트리를 구성하는 가장 작은 단위로, 하나의 노드는 데이터베이스에서 하나의 페이지에 해당합니다. 이 글에서는 노드가 되는 페이지에 대해서 살펴보고, 노드 분할이 발생하는 경우와 그 과정에 대해서 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;예시의&nbsp;모든 질의는 &lt;strong&gt;11.3.0.1089-bd31bd5&lt;/strong&gt; 버전에서 실행했습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;B+ 트리의 노드(= 페이지)&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;데이터베이스의 모든 데이터는 페이지에 저장되며, 모든 페이지는 슬롯 페이지 구조(Slotted Page Structure)로 되어 있습니다. 슬롯 페이지 구조에 대해 더 알고 싶다면 &quot;&lt;a href=&quot;https://www.cubrid.com/blog/3822789&quot; target=&quot;_blank&quot;&gt;CUBRID 슬랏 페이지(slotted page) 구조 살펴보기&lt;/a&gt;&quot;&nbsp;글을 참고해주세요. 모든 페이지는 페이지 헤더(SPAGE_HEADER)를 포함하고 있습니다. 페이지는 페이지 헤더의 페이지 타입(PAGE_TYPE)을 통해 어떤 테이터를 저장하고 있는지를 구분할 수 있습니다. 페이지 타입에 따라 추가로 필요한 헤더를 가질 수 있습니다. B+ 트리의 노드는 페이지 타입이 PAGE_BTREE인 페이지입니다. PAGE_BTREE 페이지는 페이지 헤더와 페이지 타입에 필요한 노드 헤더(BTREE_NODE_HEADER)&nbsp;또는 오버플로 헤더(BTREE_OVERFLOW_HEADER)를 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;일반적으로 B+ 트리는 노드를 3 계층으로 구분합니다. 가장 상위 노드를 루트(Root) 노드, 가장 하위 노드를 리프(Leaf) 노드, 루트와 리프 사이에 있는 노드를 브랜치(Branch) 노드라고 합니다. 노드가 어느 계층의 노드인지는 노드 헤더가 가지고 있는 노드 레벨 (node_level)로 확인할 수 있습니다. 리프 노드의 노드 레벨은 항상 1이며,&nbsp;루트 노드의 노드 레벨은 B+ 트리의 높이입니다. B+ 트리의 높이가 3인 경우, 브랜치 노드의 노드 레벨은 2가 되고, 루트 노드의 노드 레벨은 3이 됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;노드 레벨에 따라서 노드 타입을 구분하고 있습니다. 노드 타입은 리프가 아닌 노드(BTREE_NON_LEAF_NODE), 리프 노드(BTREE_LEAF_NODE), 오버플로 노드(BTREE_OVERFLOW_NODE)&nbsp;등 3가지가 있습니다. 노드 레벨이 1인 경우 노드의 노드 타입은 BTREE_LEAF_NODE(리프 노드)가 되며, 노드 레벨이 1보다 큰 경우 BTREE_NON_LEAF_NODE(리프가 아닌 노드)가 됩니다. B+ 트리의 높이가 1인 경우에는&nbsp;인덱스를 구성하는 페이지가 1개이고, 루트 노드의 노드 레벨이 1이기 때문에 루트 노드의 노드 타입이 BTREE_LEAF_NODE(리프 노드)가 됩니다. 오버플로 노드에 대해서는 좀 더 아래에서 알아보겠습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/btree.h&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;typedef&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;enum&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;{&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;BTREE_LEAF_NODE&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;,&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;BTREE_NON_LEAF_NODE,&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;BTREE_OVERFLOW_NODE&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&nbsp;BTREE_NODE_TYPE;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;루트 노드는 루트 헤더(BTREE_ROOT_HEADER)를 가지고 있습니다. 루트 헤더는 노드 헤더를 포함하고 있고, 인덱스 전체에 대한 메타 정보를 저장하고 있습니다. 브랜치 노드와 리프 노드는 노드 헤더만 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/39dee4216ece76603b60145b0de7145a.png&quot; alt=&quot;BTREE_ROOT_HEADER.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/d68c4199c8ad844cb2cce0e277a08ca2.png&quot; alt=&quot;BTREE_NODE_HEADER.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;페이지의 0번 슬롯이 루트 헤더 또는 노드 헤더를 가리키고 있습니다. 루트 노드와 브랜치 노드의 레코드는 다음 계층 노드의 VPID를 저장하고 있고, VPID는 페이지에 접근할 수 있는 주소입니다. &nbsp;VPID는 볼륨 아이디, 페이지 아이디로 구성되어 있습니다. 리프 노드의 레코드는&nbsp;테이블 레코드들의 OID를 저장하고 있고, OID는 레코드에 접근할 수 있는 주소입니다. OID는 볼륨 아이디, 페이지 아이디, 슬롯 아이디로 구성되어 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/4431a5e996c67f9ba112cde941ae8b76.png&quot; alt=&quot;PAGE_BTREE.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;오버플로 노드 (BTREE_OVERFLOW_NODE)&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;리프 노드에 동일한 키가 여러 번 입력되면 해당 키는 한 번만 저장하고 테이블 레코드들의 OID를 모아서 저장합니다. 이러한 구조는 같은 키를 가지는 테이블 레코드들을 빠르게 찾을 수 있도록 하는 장점이 있습니다. 그러나 OID 목록에서 특정 OID를 찾는 것은 어려울 수 있습니다. OID 목록의 크기는 페이지 크기의 1/8을 초과할 수 없으며, 페이지 크기의 1/8을 초과하는 OID들은 오버플로 노드에 저장됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/btree_load.h&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#0086b3&quot;&gt;#define&lt;/span&gt;&nbsp;BTREE_MAX_OIDLEN_INPAGE&nbsp;((&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;)&nbsp;(DB_PAGESIZE&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;/&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;8&lt;/span&gt;))&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;오버플로 노드에는 2개의 슬롯만 존재합니다. 0번 슬롯은 오버플로 헤더를 가리키고 있으며, 1번 슬롯은 OID 목록을 가리키고 있습니다. 하나의 오버플로 노드에 OID 목록을 모두 저장할 수 없는 경우에는 오버플로 헤더가 다음 오버플로 노드의 VPID를 저장하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/95e5b78dac116b00328badf6388b7943.png&quot; alt=&quot;BTREE_OVERFLOW_NODE.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/d72fdfc8a802f7593246e21c57fa16de.png&quot; alt=&quot;BTREE_OVERFLOW_HEADER.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;리프 노드의 레코드가 오버플로 노드에 OID 목록을 저장하고 있는 경우에는&nbsp;첫 번째 OID의 슬롯 아이디에 BTREE_LEAF_RECORD_OVERFLOW_OIDS 플래그를 설정하며, 레코드 마지막에는 첫 번째 오버플로 노드의 VPID가 저장되어 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/btree.c&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;(btree_leaf_is_flaged&nbsp;(rec,&nbsp;BTREE_LEAF_RECORD_OVERFLOW_OIDS))&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;{&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;btree_leaf_get_vpid_for_overflow_oids&nbsp;(rec,&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;&lt;/span&gt;leaf_rec&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&gt;&lt;/span&gt;ovfl);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;}&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;else&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;{&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;VPID_SET_NULL&nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;&lt;/span&gt;leaf_rec&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&gt;&lt;/span&gt;ovfl);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;}&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;PAGE_OVERFLOW 페이지&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;사용자가 입력하는 키의 크기가 너무 커서 하나의 페이지에 저장할 수 없는 경우가 있습니다. 리프 노드에 저장할 수 있는 키의 크기는 페이지 크기의 1/8을 초과할 수 없습니다. 페이지 크기의 1/8을 초과하는 키는 리프 노드에 저장되지 않고,&nbsp;하나 이상의 PAGE_OVERFLOW 페이지에 나누어 저장됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/btree_load.h&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#0086b3&quot;&gt;#define&lt;/span&gt;&nbsp;BTREE_MAX_KEYLEN_INPAGE&nbsp;((&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;)&nbsp;(DB_PAGESIZE&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;/&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;8&lt;/span&gt;))&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;PAGE_OVERFLOW 페이지는 페이지 타입이 PAGE_OVERFLOW인 페이지입니다. 이 페이지는 페이지 헤더가 없으며, 슬롯 페이지 구조도 아닙니다. 첫 번째 PAGE_OVERFLOW 페이지는 OVERFLOW_FIRST_PART를 저장하고 있고, 두 번째 PAGE_OVERFLOW 페이지부터는 OVERFLOW_REST_PART를 저장하고 있습니다. 전체 키의 길이는 OVERFLOW_FIRST_PART에만 저장되어 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/6e25a618350c03f03ddc0efb6f1069eb.png&quot; alt=&quot;PAGE_OVERFLOW.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/791e1865fc70c6fe00e1a41cc355e45f.png&quot; alt=&quot;OVERFLOW_FIRST_REST_PART.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;리프 노드의 레코드가 PAGE_OVERFLOW 페이지에 키를 저장하고 있는 경우에는&nbsp;첫 번째 OID의 슬롯 아이디에 BTREE_LEAF_RECORD_OVERFLOW_KEY 플래그를 설정하며, 레코드 마지막에는 첫 번째 PAGE_OVERFLOW 페이지의 VPID가 저장되어 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/btree.c&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;(btree_leaf_is_flaged&nbsp;(rec,&nbsp;BTREE_LEAF_RECORD_OVERFLOW_KEY))&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;{&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;key_type&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&nbsp;BTREE_OVERFLOW_KEY;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;}&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;PAGE_OVERFLOW 페이지는 인덱스 페이지가 아니라 데이터 페이지입니다. PAGE_BTREE 페이지는 인덱스 페이지로 개수를 세고 있지만, PAGE_OVERFLOW 페이지는 데이터 페이지로 개수를 세고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;src/storage/page_buffer.c&nbsp;-&nbsp;pgbuf_scan_bcb_table&nbsp;()&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;switch&lt;/span&gt;&nbsp;(page_type)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;{&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;case&lt;/span&gt;&nbsp;PAGE_BTREE:&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;show_status_snapshot&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&gt;&lt;/span&gt;num_index_pages&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;case&lt;/span&gt;&nbsp;PAGE_OVERFLOW:&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;case&lt;/span&gt;&nbsp;PAGE_HEAP:&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;show_status_snapshot&lt;span style=&quot;color:#ff3399&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&gt;&lt;/span&gt;num_data_pages&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;+&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;break&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;...&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;노드 분할&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;노드 분할이 발생하는 경우&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;새로운 키를 저장하기 위한 공간이 부족하거나 기존 레코드의 크기가 증가하는 경우에는&nbsp;노드 분할이 발생할 수 있습니다. 이를 좀 더 자세히 살펴보면 다음과 같은 경우가 있습니다:&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1.&nbsp;새로운 키가 입력되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2.&nbsp;기존 키의 크기가 증가하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.&nbsp;기존 레코드에 테이블 레코드의 OID가 추가되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.&nbsp;기존 레코드에 MVCC 아이디가 추가되는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;1. 새로운 키가 입력되는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;새로운 키의 입력은 충분한 여유 공간을 필요로 합니다. 해당 페이지에 여유 공간이 부족하면 노드 분할이 발생할 수 있습니다. 노드 분할이 발생하기 전까지 1978개의 키를 입력했습니다. 이 상태에서 새로운 키를 입력하면 노드 분할이 발생한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t1&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1978&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#c10aff&quot;&gt;1979&lt;/span&gt;);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1983&nbsp;(1980&nbsp;-&gt;&nbsp;1983)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1983&nbsp;(1980&nbsp;-&gt;&nbsp;1983)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;3&nbsp;(2&nbsp;-&gt;&nbsp;3)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;4&nbsp;(3&nbsp;-&gt;&nbsp;4)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;2. 기존 키의 크기가 증가하는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;기존 키의 크기가 증가하면 레코드의 크기도 증가하게 됩니다. 해당 페이지에 여유 공간이 부족하면 노드 분할이 발생할 수 있습니다. 가변 길이 문자열 타입(VARCHAR)에서는 기존 키의 크기를 변경할 수 있습니다. 노드 분할이 발생하기 전까지 1581개의 키를 입력했습니. 이 상태에서 기존에 입력했던 키의 크기를 크게 변경하면 노드 분할이 발생한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t1&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;varchar&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1581&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;lpad&nbsp;(n,&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;4&lt;/span&gt;,&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;0&#39;&lt;/span&gt;)&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;update&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;set&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;lpad&nbsp;(c1,&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;20&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;4&nbsp;-&gt;&nbsp;20&nbsp;*/&lt;/span&gt;,&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;9&#39;&lt;/span&gt;)&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1581&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1585&nbsp;(1583&nbsp;-&gt;&nbsp;1585)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1585&nbsp;(1583&nbsp;-&gt;&nbsp;1585)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;3&nbsp;(2&nbsp;-&gt;&nbsp;3)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;4&nbsp;(3&nbsp;-&gt;&nbsp;4)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;3. 기존 레코드에 테이블 레코드의 OID가 추가되는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;같은 키가 입력되면 중복된 키를 저장하지 않고, 기존 키 뒤에 테이블 레코드의 OID를 추가합니다. 추가된 OID의 크기만큼 레코드의 크기도 증가하게 됩니다. 해당 페이지에 여유 공간이 부족하면 노드 분할이 발생할 수 있습니다. 노드 분할이 발생하기 전까지 1977개의 키를 입력했습니다. 이 상태에서 기존에 입력했던 키와 같은 키를 몇 번 더 입력하면 노드 분할이 발생한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t1&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;count&nbsp;(&lt;span style=&quot;color:#4be6fa&quot;&gt;*&lt;/span&gt;)&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;&lt;00001&gt;&nbsp;count(*):&nbsp;1&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;);&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;count&nbsp;(&lt;span style=&quot;color:#4be6fa&quot;&gt;*&lt;/span&gt;)&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1977&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;&lt;00001&gt;&nbsp;count(*):&nbsp;4&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1981&nbsp;(1979&nbsp;-&gt;&nbsp;1981)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1984&nbsp;(1979&nbsp;-&gt;&nbsp;1984)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;3&nbsp;(2&nbsp;-&gt;&nbsp;3)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;4&nbsp;(3&nbsp;-&gt;&nbsp;4)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;4. 기존 레코드에 MVCC 아이디가 추가되는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;레코드를 변경할 때 MVCC 아이디가 추가되도록 하려면 클라이언트/서버 모드에서 AUTO COMMIT을 비활성화하고 질의를 실행해야 합니다. 이 상태에서 질의를 실행하면 트랜잭션을 시작합니다. 트랜잭션 중에는 키를 삭제해도 물리적으로 삭제하지 않고, DELETE MVCC 아이디를 추가합니다. 추가되는 DELETE MVCC 아이디의 크기만큼 레코드의 크기도 증가하게 됩니다. 해당 페이지에 여유 공간이 부족하면 노드 분할이 발생할 수 있습니다. 노드 분할이 발생하기 전까지 1318개의 키를 입력했습니다. 이 상태에서 AUTO COMMIT을 비활성화하고 몇 개의 기존 키를 삭제하면 노드 분할이 발생한 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;client-server&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;cubrid&nbsp;server&nbsp;start&nbsp;&lt;db_name&gt;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t1&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1318&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;autocommit&nbsp;off&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1318&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1317&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1316&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1315&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1314&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;delete&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;=&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1313&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t1.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1322&nbsp;(1320&nbsp;-&gt;&nbsp;1322)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1322&nbsp;(1320&nbsp;-&gt;&nbsp;1322)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;3&nbsp;(2&nbsp;-&gt;&nbsp;3)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;4&nbsp;(3&nbsp;-&gt;&nbsp;4)&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;사용자가 키를 입력하는 패턴에 따라 달라지는 노드 분할 #1&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;B+ 트리의 키가 항상 정렬되어 있기 때문에 사용자가 어떤 패턴으로 키를 입력하더라도 B+ 트리의 상태는 항상 동일하다고 착각할 수 있습니다. University of San Francisco의 &lt;a href=&quot;https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html&quot; target=&quot;_blank&quot;&gt;B+ Tree Visualization&lt;/a&gt;을 사용하여 아래 2개의 시나리오 결과를 비교해 보았습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1. 시나리오 #1 - 1부터 27까지 오름차순으로 증가하는 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2. 시나리오 #2 - 1부터 27까지 불규칙 패턴으로 키를 입력하는 경우&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Max. Degree는 7로 설정했습니다. 페이지에 7번째 키가 입력될 때 노드의 레코드가 반으로 분할됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;시나리오 #1 - 1부터 27까지 오름차순으로 증가하는 패턴으로 키를 입력하는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1&lt;strong&gt;&rarr;&lt;/strong&gt;2&lt;strong&gt;&rarr;&lt;/strong&gt;3&lt;strong&gt;&rarr;&lt;/strong&gt;4&lt;strong&gt;&rarr;&lt;/strong&gt;5&lt;strong&gt;&rarr;&lt;/strong&gt;6&lt;strong&gt;&rarr;&lt;/strong&gt;7&lt;strong&gt;&rarr;&lt;/strong&gt;8&lt;strong&gt;&rarr;&lt;/strong&gt;9&lt;strong&gt;&rarr;&lt;/strong&gt;10&lt;strong&gt;&rarr;&lt;/strong&gt;11&lt;strong&gt;&rarr;&lt;/strong&gt;12&lt;strong&gt;&rarr;&lt;/strong&gt;13&lt;strong&gt;&rarr;&lt;/strong&gt;14&lt;strong&gt;&rarr;&lt;/strong&gt;15&lt;strong&gt;&rarr;&lt;/strong&gt;16&lt;strong&gt;&rarr;&lt;/strong&gt;17&lt;strong&gt;&rarr;&lt;/strong&gt;18&lt;strong&gt;&rarr;&lt;/strong&gt;19&lt;strong&gt;&rarr;&lt;/strong&gt;20&lt;strong&gt;&rarr;&lt;/strong&gt;21&lt;strong&gt;&rarr;&lt;/strong&gt;22&lt;strong&gt;&rarr;&lt;/strong&gt;23&lt;strong&gt;&rarr;&lt;/strong&gt;24&lt;strong&gt;&rarr;&lt;/strong&gt;25&lt;strong&gt;&rarr;&lt;/strong&gt;26&lt;strong&gt;&rarr;&lt;/strong&gt;27 순서로 키를 입력했습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/aabdc39632924496380391a20fa2115a.png&quot; alt=&quot;B+ Tree Image 001_crop.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;시나리오 #2 - 1부터 27까지 불규칙 패턴으로 키를 입력하는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;14&lt;strong&gt;&rarr;&lt;/strong&gt;13&lt;strong&gt;&rarr;&lt;/strong&gt;26&lt;strong&gt;&rarr;&lt;/strong&gt;12&lt;strong&gt;&rarr;&lt;/strong&gt;24&lt;strong&gt;&rarr;&lt;/strong&gt;11&lt;strong&gt;&rarr;&lt;/strong&gt;22&lt;strong&gt;&rarr;&lt;/strong&gt;10&lt;strong&gt;&rarr;&lt;/strong&gt;20&lt;strong&gt;&rarr;&lt;/strong&gt;9&lt;strong&gt;&rarr;&lt;/strong&gt;18&lt;strong&gt;&rarr;&lt;/strong&gt;27&lt;strong&gt;&rarr;&lt;/strong&gt;8&lt;strong&gt;&rarr;&lt;/strong&gt;16&lt;strong&gt;&rarr;&lt;/strong&gt;7&lt;strong&gt;&rarr;&lt;/strong&gt;21&lt;strong&gt;&rarr;&lt;/strong&gt;6&lt;strong&gt;&rarr;&lt;/strong&gt;5&lt;strong&gt;&rarr;&lt;/strong&gt;15&lt;strong&gt;&rarr;&lt;/strong&gt;25&lt;strong&gt;&rarr;&lt;/strong&gt;4&lt;strong&gt;&rarr;&lt;/strong&gt;3&lt;strong&gt;&rarr;&lt;/strong&gt;2&lt;strong&gt;&rarr;&lt;/strong&gt;1&lt;strong&gt;&rarr;&lt;/strong&gt;17&lt;strong&gt;&rarr;&lt;/strong&gt;19&lt;strong&gt;&rarr;&lt;/strong&gt;23 순서로 키를 입력했습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/ed0b7dd491d3b17a5f6a770f5a68a8ef.png&quot; alt=&quot;B+ Tree Image 002_crop.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;비교 결과&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;B+ 트리의 높이가 시나리오 #1은 3이고, 시나리오 #2는 2입니다. B+ 트리의 높이가 높아지면&nbsp;키를 탐색할 때 더 많은 노드에 접근해야 하므로 성능 저하가 발생 수 있습니다. 사용하는 페이지 수도 시나리오 #1은 11개이고, 시나리오 #2는 8개입니다. 시나리오 #1에서는 가장 오른쪽 리프 노드를 제외하고는 키를 4개 이상 저장하고 있는 리프 노드가 없습니다. 오름차순으로 증가하는 패턴으로 키를 입력하기 때문에 새로운 키는 가장 오른쪽 리프 노드에만 입력되고, 나머지 리프 노드에서는 저장 공간이 낭비됩니다. 시나리오 #1과 시나리오 #2는&nbsp;키를 입력하는 패턴만 다르고, 나머지는 동일합니다. 사용자가 불규칙 패턴으로 키를 입력할 때는 성능 저하와 저장 공간의 낭비가 발생하지 않았습니다. 그러나 사용자가 항상 같은 패턴으로 키를 입력하는 것을 기대하는 것은 불가능합니다. 사용자는 서비스하고 있는 데이터의 성격에 따라 오름차순, 내림차순 또는 불규칙한 패턴으로 키를 삽입합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;똑똑하게 노드 분할하기&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;B+ 트리에서는 키가 정렬된 위치에 입력되기 때문에 키가 입력되는 슬롯 아이디의 변화를 통계적으로 분석하면 사용자가 키를 입력하는 패턴을 파악할 수 있습니다. 예를 들어, 오름차순 인덱스라고 가정할 때, 리프 노드의 가장 마지막 슬롯에 새로운 키가 입력되면 오름차순으로 증가하는 패턴으로 키가&nbsp;입력되고 있다고&nbsp;예측할 수 있습니다. 반대로 리프 노드의 노드 헤더 바로 다음 슬롯에 새로운 키가 입력되면 내림차순으로 감소하는 패턴으로 키가&nbsp;입력되고 있다고&nbsp;것으로 예측할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;노드 헤더는 노드 분할 정보(BTREE_NODE_SPLIT_INFO)를 포함하고 있습니다. 이 정보는 페이지에 입력되는 슬롯 아이디에 대한 누적 이동 평균(pivot)을 계산해서 저장합니다. 새로운 키가 입력될 때마다 btree_split_next_pivot 함수에서 새로운 누적 이동 평균을 계산하고, 노드 분할이 필요한 경우에는 btree_find_split_point 함수에서 현재의 누적 이동 평균을 확인해서&nbsp;노드의 레코드를 분할합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/abad5dbc0612bec3754c0abc2274a6f6.png&quot; alt=&quot;BTREE_NODE_SPLIT_INFO.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#0&nbsp;&nbsp;btree_split_next_pivot&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:12603&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#1&nbsp;&nbsp;0x00007ff421cd3e96&nbsp;in&nbsp;btree_key_insert_new_key&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:27717&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#2&nbsp;&nbsp;0x00007ff421cd335e&nbsp;in&nbsp;btree_key_insert_new_object&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:27484&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#3&nbsp;&nbsp;0x00007ff421cc7d9c&nbsp;in&nbsp;btree_search_key_and_apply_functions&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:22802&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#4&nbsp;&nbsp;0x00007ff421ccfb63&nbsp;in&nbsp;btree_insert_internal&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26345&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#5&nbsp;&nbsp;0x00007ff421ccf635&nbsp;in&nbsp;btree_insert&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26199&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;누적 이동 평균은 다음과 같은 수식으로 계산됩니다.&nbsp;여기서&nbsp;CA&lt;sub&gt;i&lt;/sub&gt;는 i+1번째 키가 입력되기 전에 노드 분할 정보에 저장된&nbsp;누적 이동 평균을 나타냅니다. 또한, X&lt;sub&gt;i+1&lt;/sub&gt;은 i+1번째 키에 대한 이동 평균을 나타냅니다.&nbsp;이는 i+1번째 키가 입력된 슬롯 아이디를 i+1번째 키가 입력된 후의 전체 키 개수로 나누어 계산됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/0788ed1c1bf3915723a40557082a1006.png&quot; alt=&quot;Cumulative Moving Average.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;노드 분할이 발생할 때 레코드를 분할할 위치는 btree_split_find_pivot 함수에서 결정됩니다. 이&nbsp;함수는 누적 이동 평균을 직접적으로 반영하지 않습니다. 누적 이동 평균이&nbsp;0.2f(BTREE_SPLIT_LOWER_BOUND)와 0.8f(BTREE_SPLIT_UPPER_BOUND) 사이에 있는 경우에는 레코드를 반으로 분할하고, 벗어나는 경우에만 누적 이동 평균을 직접적으로 반영하여&nbsp;레코드를 분할할 위치를 결정합니다. 만약&nbsp;누적 이동 평균이 0.05f(BTREE_SPLIT_MIN_PIVOT)보다 작으면 0.05f를 사용하고,&nbsp;0.95f(BTREE_SPLIT_MAX_PIVOT)보다 크면 0.95f를 사용하여&nbsp;레코드를 분할할 위치를 결정합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/35528c43cc142756ca6e94a8ad70c8e1.png&quot; alt=&quot;Cumulative_Moving_Average_Range.png&quot; style=&quot;width: 40%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#0&nbsp;&nbsp;btree_split_find_pivot&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:12575&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#1&nbsp;&nbsp;0x00007ff421cafaee&nbsp;in&nbsp;btree_find_split_point&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:12289&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#2&nbsp;&nbsp;0x00007ff421cb3cbd&nbsp;in&nbsp;btree_split_root&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:13889&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#3&nbsp;&nbsp;0x00007ff421cd1934&nbsp;in&nbsp;btree_split_node_and_advance&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:27003&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#4&nbsp;&nbsp;0x00007ff421cc7b93&nbsp;in&nbsp;btree_search_key_and_apply_functions&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:22753&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#5&nbsp;&nbsp;0x00007ff421ccfb63&nbsp;in&nbsp;btree_insert_internal&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26345&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#6&nbsp;&nbsp;0x00007ff421ccf635&nbsp;in&nbsp;btree_insert&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26199&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#0&nbsp;&nbsp;btree_split_find_pivot&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:12575&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#1&nbsp;&nbsp;0x00007ff421cafaee&nbsp;in&nbsp;btree_find_split_point&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:12289&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#2&nbsp;&nbsp;0x00007ff421cb1a1e&nbsp;in&nbsp;btree_split_node&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:13051&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#3&nbsp;&nbsp;0x00007ff421cd28f9&nbsp;in&nbsp;btree_split_node_and_advance&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:27290&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#4&nbsp;&nbsp;0x00007ff421cc7b93&nbsp;in&nbsp;btree_search_key_and_apply_functions&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:22753&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#5&nbsp;&nbsp;0x00007ff421ccfb63&nbsp;in&nbsp;btree_insert_internal&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26345&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;#6&nbsp;&nbsp;0x00007ff421ccf635&nbsp;in&nbsp;btree_insert&nbsp;(...)&nbsp;at&nbsp;src/storage/btree.c:26199&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;사용자가 키를 입력하는 패턴에 따라 달라지는 노드 분할 #2&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;1. 오름차순으로 증가하는 패턴으로 키를 입력하는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;새로운 키는 항상 페이지의 마지막 슬롯에 입력되기 때문에 노드 분할 정보에서 누적 이동 평균은 0.95f(BTREE_SPLIT_MAX_PIVOT)보다 큰 값을 유지합니다. 따라서 노드 분할이 발생할 때 누적 이동 평균이 0.95f보다 크기 때문에 분할되는 왼쪽 페이지에는 전체 레코드 길이의 95%가 이동하고, 오른쪽 페이지에는 나머지 5%가 이동합니다. SHOW INDEX CAPACITY에서 Total_free_space_non_ovf를 보면 공간 낭비가 없는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;set&lt;/span&gt;&nbsp;system&nbsp;parameters&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;cte_max_recursions=100000&#39;&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t_asc;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t_asc&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t_asc&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;100000&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t_asc.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t_asc&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100206&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100206&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;104&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;105&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_space&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;1.6M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_used_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;1.5M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_free_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;101.9K&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/59f009f049f884cee9a3049353d88fb6.png&quot; alt=&quot;pivot_asc.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;2. 내림차순으로 감소하는 패턴으로 키를 입력하는 경우&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;새로운 키는 항상 페이지의 1번 슬롯에 입력되기 때문에 노드 분할 정보에서 누적 이동 평균은 0.05f(BTREE_SPLIT_MIN_PIVOT)보다 작은 값을 유지합니다. 노드 분할이 발생할 때 누적 이동 평균이 0.05f보다 작기 때문에 분할되는 왼쪽 페이지에는 전체 레코드 길이의 5%가 이동하고, 오른쪽 페이지에는 나머지 95%가 이동합니다. SHOW INDEX CAPACITY에서 Total_free_space_non_ovf를 보면 공간 낭비가 없는&nbsp;것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;set&lt;/span&gt;&nbsp;system&nbsp;parameters&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;cte_max_recursions=100000&#39;&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t_desc;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t_desc&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t_desc&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;100000&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;order&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;by&lt;/span&gt;&nbsp;n&nbsp;desc;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t_desc.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t_desc&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100206&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100206&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;104&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;105&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_space&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;1.6M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_used_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;1.5M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_free_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;101.9K&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/ac217931d02a142c2befb61c659debea.png&quot; alt=&quot;pivot_desc.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h5&gt;&lt;strong&gt;3. 불규칙 패턴으로 키를 입력하는 경우&lt;/strong&gt;&lt;/h5&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;키가 입력될 때마다 키가 입력되는 슬롯 아이디에 대한 누적 이동 평균이 갱신됩니다. 그래프를 보면 0.5f에서 크게 벗어나지 않고 있습니다. 노드 분할이 발생할 때 누적 이동 평균이 0.2f(BTREE_SPLIT_LOWER_BOUND)와 0.8f(BTREE_SPLIT_UPPER_BOUND) 사이에 있기 때문에 분할되는 왼쪽 페이지와 오른쪽 페이지에 각각 전체 레코드 길이의 50%를 이동합니다. SHOW INDEX CAPACITY 결과를 확인하면 오름차순 및&nbsp;내림차순 패턴과 비교했을 때 Total_free_space_non_ovf가 큰 편입니다. 하지만 불규칙 패턴에서는 분할되는 왼쪽과&nbsp;오른쪽 페이지 양쪽에&nbsp;새로운 키가 입력될 가능성이 있으므로,&nbsp;잦은 노드 분할을 방지하기 위해&nbsp;적당한 여유 공간을 유지하는&nbsp;것이 좋습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;set&lt;/span&gt;&nbsp;system&nbsp;parameters&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;cte_max_recursions=100000&#39;&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t_random;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t_random&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t_random&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;100000&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;order&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;by&lt;/span&gt;&nbsp;random&nbsp;();&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;csql&gt;&nbsp;;line-output&nbsp;on&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;show&lt;/span&gt;&nbsp;index&nbsp;capacity&nbsp;of&nbsp;t_random.i1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/*&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;00001&gt;&nbsp;Table_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;dba.t_random&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Index_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;i1&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Btid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;(0|4160|4161)&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_distinct_key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100254&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;100254&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;128&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_non_leaf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_ovf_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;0&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Num_total_page&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;129&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;2&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_space&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;2.0M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_used_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;1.5M&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total_free_space_non_ovf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&#39;482.4K&#39;&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/14047335f1195402dfab3efc15382f9b.png&quot; alt=&quot;pivot_random.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;루트 노드 &rarr; 브랜치 노드 &rarr; 리프 노드 순서의 노드 분할&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;노드 분할은 루트 노드 &rarr; 브랜치 노드 &rarr; 리프 노드 순서로 발생합니다. 키는&nbsp;리프 노드에 입력되기 때문에 처음에는 리프 노드에서 노드 분할이 발생할 것으로&nbsp;생각할 수 있습니다. 그러나 실제로는 루트 노드부터 시작하여 새로운 키를 입력할 수 있는&nbsp;여유 공간이 있는지 확인합니다. 루트 노드에 공간이 부족하다면 키가 입력되지 전에 루트 노드에서부터 노드 분할이 발생합니다. 나중에 리프 노드에서 분할이 발생했을 때&nbsp;분할된 페이지를 구분하기 위한 분할 키를 루트 노드와 브랜치 노드에 저장해야 하기 때문에 미리&nbsp;여유 공간이 확보하는 것입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;아래는 B+ 트리의 높이가 1에서 2가로 증가하는 과정입니다. B+ 트리의 높이 1일 때는 리프 노드가 1개만 존재합니다. 리프 노드에 새로운 키를 저장할 수 있는 공간이 부족할 때 노드 분할이 발생합니다. 루트 노드의 분할은 새로운 키가 입력되기 전에 발생하며, 노드 분할이 완료된 후에 정렬된 위치에 새로운 키가 입력됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;drop&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;exists&lt;/span&gt;&nbsp;t1;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;create&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;table&lt;/span&gt;&nbsp;t1&nbsp;(c1&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;int&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;auto_increment&lt;/span&gt;,&nbsp;index&nbsp;i1&nbsp;(c1));&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1012&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;null&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;null&lt;/span&gt;);&nbsp;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;1013&nbsp;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/0cf79594d830ced0c47d0c3496a5c996.png&quot; alt=&quot;btree_split_root_1-to-2.png&quot; style=&quot;width: 60%;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;아래는 B+ 트리의 높이가 2에서 3으로 증가하는&nbsp;과정입니다. 리프 노드에 새로운 키를 저장할 공간이 부족해서 노드 분할이 발생한 것이 아니라 루트 노드에 여유 공간이 부족해서 노드 분할이 발생했습니다. 루트 노드의 노드 분할이 완료된 후에는 정렬된 위치의 리프 노드에 새로운 키가 입력된 것을 확인할 수 있습니다. 이 때 리프 노드의 공간은 충분하기 때문에 노드 분할이 발생하지 않았습니다. 루트 노드가 분할하면서 B+ 트리의 높이가 2에서 3으로 증가할&nbsp;때 새로운 브랜치 노드 2개가&nbsp;추가됩니다. 루트 노드와 리프 노드의 VPID는 변경되지 않고, 새로운 브랜치 노드에 리프 노드의 레코드를 이동합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important; position:relative !important;overflow:auto&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;colorscripter-code-table&quot; style=&quot;margin:0;padding:0;border:none;background-color:#272727;border-radius:4px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;padding:6px;border-right:2px solid #4f4f4f&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#aaa;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;

			&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
			&lt;td style=&quot;padding:6px 0;text-align:left&quot;&gt;
			&lt;div style=&quot;margin:0;padding:0;color:#f0f0f0;font-family:Consolas, &#039;Liberation Mono&#039;, Menlo, Courier, monospace !important;line-height:130%&quot;&gt;
			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;standalone&nbsp;mode&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*&nbsp;&nbsp;&nbsp;$&nbsp;csql&nbsp;-u&nbsp;dba&nbsp;&lt;db_name&gt;&nbsp;-S&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&nbsp;*/&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;set&lt;/span&gt;&nbsp;system&nbsp;parameters&nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&#39;cte_max_recursions=1000000&#39;&lt;/span&gt;;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;with&nbsp;recursive&nbsp;cte&nbsp;(n)&nbsp;as&nbsp;(&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;all&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;+&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;where&lt;/span&gt;&nbsp;n&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;&lt;&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#c10aff&quot;&gt;976629&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;-&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1013&lt;/span&gt;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&nbsp;)&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;select&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;null&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;from&lt;/span&gt;&nbsp;cte;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&nbsp;&lt;/div&gt;

			&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;insert&lt;/span&gt;&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;into&lt;/span&gt;&nbsp;t1&nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;values&lt;/span&gt;&nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;null&lt;/span&gt;);&nbsp;&lt;span style=&quot;color:#999999&quot;&gt;/*&nbsp;976630&nbsp;*/&lt;/span&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/675/843/003/8b77f38eea8f929a3ea36aef6fb7a5b8.png&quot; alt=&quot;btree_split_root_2-to-3.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;/h3&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1.&nbsp;&lt;a href=&quot;https://www.cubrid.com/blog/3822789&quot; target=&quot;_blank&quot;&gt;[CUBRID Blog]&nbsp;CUBRID 슬랏 페이지(slotted page) 구조 살펴보기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;2.&nbsp;&lt;a href=&quot;https://d2.naver.com/helloworld/1043622&quot; target=&quot;_blank&quot;&gt;[NAVER D2]&nbsp;CUBRID Internals - 키와 인덱스의 관계&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;3.&nbsp;&lt;a href=&quot;https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html&quot; target=&quot;_blank&quot;&gt;[University of San Francisco] B+ Tree Visualization&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;4.&nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Moving_average&quot; target=&quot;_blank&quot;&gt;[Wikimedia] Moving average - Cumulative average&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Wed, 27 Dec 2023 19:55:37 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[Visual Studio Code 소개]]></title>
			<dc:creator><![CDATA[송일한]]></dc:creator>
			<link>https://www.cubrid.com/blog/3843495</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3843495</guid>
						<comments>https://www.cubrid.com/blog/3843495#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h1&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;시작하며&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Visual Studio Code (이하 VSCode) 는 마이크로소프트에서 오픈소스로 개발하고 있는 코드 에디터입니다. VSCode는 활용하기에 따라 메모장과 비슷한 기능을 하기도, IDE(통합 개발 환경) 로써의 기능을 하기도 합니다. 이미 많은 개발자들이 VSCode를 사용하고 있습니다. 그러나 VSCode의 사용이 낯선 개발자들을 위해 이 글에서는 VSCode의 기본적인 사용 방법을 소개드리려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;설치 및 시작&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;VSCode는 공식 웹 사이트(&lt;a data-token-index=&quot;1&quot; href=&quot;https://code.visualstudio.com/&quot; rel=&quot;noopener noreferrer&quot; tabindex=&quot;0&quot;&gt;https://code.visualstudio.com&lt;/a&gt;)에서 자신의 운영체제에 맞는 버전을 다운로드 받아 설치할 수 있습니다. 설치하고 난 뒤 VSCode를 실행하면 다음과 같은 화면을 마주할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/7846f8ce21ef45f4898314fe4bc09e31.png&quot; alt=&quot;Untitled.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;이제, 수정하고 싶은 파일을 VSCode 내부로 끌어다 놓거나, Open File, Open Folder 를 통해 파일 및 폴더를 열어 로컬에 있는 코드를 개발할 수 있습니다. 하지만 VSCode의 성능을 온전히 이용하려면 확장(Extension)을 설치하여 응용하는 것을 추천합니다.&nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;확장 (Extensions)&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;확장은 다음 버튼을 누르거나 Ctrl+Shift+X 를 입력하여 확장 탭에 진입할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/b7aac80fe18b55cc2de1f676f8746e8a.png&quot; alt=&quot;Untitled 1.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;초기에는 확장이 설치되지 않은 상태인데,&nbsp;&lt;span style=&quot;color:#B22222;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;Search Extensions in Marketplace&lt;/span&gt;&lt;/span&gt;&nbsp;라고 적혀있는 텍스트 상자에 원하는 확장명을 입력하여 확장을 마켓플레이스에서 검색해 설치할 수 있습니다. 예시로 VSCode를 한글로 번역해주는 확장을 설치해보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/052b6132ce70b88b711094df09567c36.png&quot; alt=&quot;Untitled 2.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;Korean 이라고 검색하면 다수의 확장들이 같이 검색됩니다. 검색 결과 중, Microsoft에서 제공하는 Korean Language Pack for Visual Studio Code 확장을 설치합니다. 검색된 확장 옆의&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;Install&lt;/span&gt;&lt;/span&gt;&nbsp;을 클릭해 설치할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/81164345fedfe39a0068f46f3978aaf1.png&quot; alt=&quot;Untitled 3.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;확장을 설치하고 난 이후에는 우측 하단에&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;Change Language and Restart&lt;/span&gt;&lt;/span&gt;&nbsp;버튼을 눌러 VSCode를 재시작하여 확장을 적용할 수 있습니다. 확장을 추가/삭제하는 경우 종종 VSCode를 재시작해야 적용되는 경우가 있으니 주의해야합니다. 이제 확장 설치 방법을 알게 되었으니, 다음으로 VSCode를 더욱 유용하게 만들어주는 몇 가지 확장을 소개하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1. Remote - SSH&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Remote - SSH 확장은 VSCode에서 원격 서버에 있는 파일을 직접 편집하거나, 터미널을 열어 원격 서버에 명령을 송신할 수 있는 확장입니다. 이 확장을 설치하면 로컬 컴퓨터가 아닌, SSH를 통해 연결된 원격 서버의 개발 환경을 직접적으로 사용할 수 있게 됩니다. 이는 특히 원격 서버를 사용하는 개발자나 클라우드 기반 개발 환경에서 작업하는 개발자들에게 유용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;VSCode 확장 탭에서 &#39;Remote - SSH&#39;를 검색하여 설치합니다. Microsoft에서 제공하는 확장을 추천합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;설치하면 왼쪽 사이드 바에 아래와 같은 탭이 추가됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/94a15ec9ac83c1b48e9ad522c92e49cf.png&quot; alt=&quot;Untitled 4.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;SSH 오른쪽에 +를 클릭하면 다음과 같은 텍스트 박스가 나오는데, 이 곳에 자신이 접속하고자 하는 서버에 연결할 수 있는 ssh 명령을 입력합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/b1bc3d35a4a11ddc8a2e4fc152bc245b.png&quot; alt=&quot;Untitled 5.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;접속하고자 하는 서버의 OS와 비밀번호를 입력하면, 서버에 VSCode 서버를 설치한 뒤 연결됩니다. 이 과정에서 약간의 시간이 소요됩니다.&nbsp;연결되고 나면&nbsp;&nbsp;폴더 열기&nbsp;를 통해 작업 영역으로 사용할 폴더를 열어 접속할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/8396bf53ca00f4befc00742e18f97da3.png&quot; alt=&quot;Untitled 6.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;공개 키를 서버에 등록해놓으면, VSCode로 서버에 연결할 때 매번 비밀번호를 입력하는 과정을 건너뛸 수 있으니 공개 키 설정을 미리 하는 것을 추천드립니다. 또한 상단바의&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;터미널/새 터미널&lt;/span&gt;&lt;/span&gt;&nbsp;을 통해 서버의 쉘 세션에 원격으로 연결할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;개발 환경 셋업&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;접근하고자 하는 장치(로컬/리모트)가 리눅스 기반 운영체제임을 가정하고 작성합니다.​&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;&nbsp;&lt;/h2&gt;

&lt;h2&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;1. Github 레포지토리 설정&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;상단 바 메뉴에서 터미널/새 터미널을 이용하면, 현재 열려있는 장치(로컬/원격)의 디렉토리를 기준으로 기본 터미널이 열리게 됩니다. 여기서 원하는 폴더에 접근하여 GitHub 레포지토리를 클론하여 작업할 수 있습니다.&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;code&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;폴더 열기&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;를 &nbsp;통해 원하는 작업 영역 폴더를 열었다고 가정하고 다음 과정에 대해 소개하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;먼저 원하는 레포지토리를 클론합니다. 포크되어있는 큐브리드 레포지토리를 클론해보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/91f9a2a6ca3714afa5194a632664cf72.png&quot; alt=&quot;Untitled 7.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;git clone&lt;/span&gt;&lt;/span&gt;명령어를 사용하여 큐브리드 레포지토리를 클론하였습니다. 작업할 브랜치를 생성한 다음, 레포지토리에 있는 파일을 수정하면, VSCode의&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;소스 제어&lt;/span&gt;&lt;/span&gt;&nbsp;탭을 통해 변경된 파일을 관리할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/6b419915f338d6dc354d6d17b7b0dcb3.png&quot; alt=&quot;Untitled 8.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;변경한 파일이 소스 제어 탭의&nbsp;변경 사항&nbsp;에 추가됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/be2fbfb4600436358666e92f51e02375.png&quot; alt=&quot;Untitled 9.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;변경한 파일을 클릭하면 변경사항이 좌우로 나뉘어 나타나게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;또한 VSCode의 &#39;소스 제어&#39; 탭을 사용하면 다음과 같은 Git 명령어들을 GUI를 통해 수행할 수 있습니다:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;font size=&quot;3&quot;&gt;git add&lt;/font&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;VSCode에서 &#39;git add&#39;를 실행하려면, 변경된 파일 목록에 있는 파일 위에 마우스를 가져가면 나타나는 &#39;+&#39; 버튼을 클릭하면 됩니다. 이렇게 하면 해당 파일이 스테이징 영역에 추가됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/32b10956062f6958140c5226ba277921.png&quot; alt=&quot;Untitled 10.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;git commit&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&#39;git add&#39;로 커밋에 포함시킬 파일들을 추가한 후, 커밋 메시지를 입력할 수 있는 텍스트 상자에 커밋 메시지를 작성하고, 커밋 버튼을 누르면 커밋이 완료됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/e57b611aa6daa38f2314c62609215816.png&quot; alt=&quot;Untitled 11.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;git push&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&#39;git commit&#39;을 실행한 후에는 커밋 버튼이 &#39;push&#39; 버튼으로 바뀝니다. 이 버튼을 클릭하면 변경사항이 원격 저장소(예: GitHub)의 해당 브랜치에 반영됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/238c063a20e893b7a49b2487c10f2a8d.png&quot; alt=&quot;Untitled 12.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;2. 디버깅&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;디버깅 도구인 GDB 등을 사용할 때, VSCode를 활용하여 디버깅을 진행하면 보다 깔끔하고 효율적입니다. 단순히 GDB를 실행하는 것이 아니기 때문에 다소 복잡할 수 있지만 하나씩 설명 드리겠습니다. VSCode에서 제공하는 다양한 디버깅 환경은 설정 방식에 따라 다양하게 활용할 수 있습니다. 여기서는 간단한 예로, CUBRID csql을 독립 실행 모드(standalone mode)로 실행하여 디버깅 환경을 설정하는 방법을 소개하겠습니다.&nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;launch.json 파일 만들기&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;현재 작업 디렉토리에&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;.vscode&lt;/span&gt;&lt;/span&gt;&nbsp;폴더를 만들고 내부에&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;launch.json&lt;/span&gt;&lt;/span&gt;&nbsp;파일을 만들어 다음 내용을 붙혀넣습니다.&nbsp;&lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;/home/cubrid/CUBRID/bin/csql&lt;/span&gt;&lt;/span&gt;&nbsp;으로 설정되어있는 csql 경로는 각자 설정에 맞게 변경해야합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;pre class=&quot;brush:plain&quot;  title=&quot;launch.json&quot;&gt;{
        &quot;version&quot;: &quot;0.2.0&quot;,
        &quot;configurations&quot;: [
            {
                &quot;name&quot;: &quot;(gdb) csql 시작&quot;,
                &quot;type&quot;: &quot;cppdbg&quot;,
                &quot;request&quot;: &quot;launch&quot;,
                &quot;program&quot;: &quot;/home/cubrid/CUBRID/bin/csql&quot;,
                &quot;args&quot;: [ &quot;-u&quot;,&quot;dba&quot;,&quot;-S&quot;, &quot;demodb&quot;],
                &quot;stopAtEntry&quot;: false,
                &quot;cwd&quot;: &quot;${workspaceFolder}&quot;,
                &quot;environment&quot;: [],
                &quot;externalConsole&quot;: false,
                &quot;MIMode&quot;: &quot;gdb&quot;,
                &quot;setupCommands&quot;: [
                    {
                        &quot;description&quot;: &quot;gdb에 자동 서식 지정 사용&quot;,
                        &quot;text&quot;: &quot;-enable-pretty-printing&quot;,
                        &quot;ignoreFailures&quot;: true
                    }
                ]
}
]
}&lt;/pre&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;중단점(breakpoint) 설정&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;소스코드에 중단점으로 설정하고 싶은 line 좌측을 클릭하여 빨간색 원형 마크를 활성화합니다.​&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/e0b08b4393eb24ff5f84725fd5033aa8.png&quot; alt=&quot;Untitled 13.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;디버깅 시작 및 진행&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;좌측 디버깅 탭 내부의 &lt;span style=&quot;color:#FF0000;&quot;&gt;&lt;span style=&quot;background-color:#D3D3D3;&quot;&gt;(gdb) csql 시작&lt;/span&gt;&lt;/span&gt; 텍스트 좌측의 재생 버튼을 눌러 디버깅을 시작합니다.&lt;/span&gt;&lt;/span&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/645c4e35c97385b38446a10d0594e3bb.png&quot; alt=&quot;Untitled 14.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;중단점으로 설정해놓은 코드 라인이 실행될 경우 프로그램이 해당 코드 라인에서 일시 정지됩니다. 코드를 다음 중단점까지 실행하려면 F5, 한 라인씩 실행하려면 F10을 눌러 진행할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/8b5b667e83b8f5045e4a2c17f48d4e40.png&quot; alt=&quot;Untitled 15.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;프로그램이 일시 정지될 시, 디버그 콘솔 창에서 함수를 실행할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/b00ba2b6031d3400d23cd3b9daf340cd.png&quot; alt=&quot;Untitled 16.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;또한 변수 창이나 일시 정지된 코드 상에서 특정 변수의 값을 확인할 수도 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/dfced33f139c1f29bbd209cfcfe2aede.png&quot; alt=&quot;Untitled 17.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/af6afc0ba2fbbb6cc4197197e4ed7870.png&quot; alt=&quot;Untitled 18.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;또한 호출스택/중단점 에서 호출 스택과 활성화/비활성화된 중단점들을 확인할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/495/843/003/de0061c4cce6cc4b34a3f2e9fe635189.png&quot; alt=&quot;Untitled 19.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;마무리하며&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;VSCode 는 다양한 확장(Extension)을 지원하며 아주 다양한 기능들을 내포하고 있습니다. 이 게시물에서 모든 기능에 대한 소개를 담지 못해 아쉽다는 생각이 듭니다. 또한 저도 꽤나 긴 시간동안 VSCode를 사용하고 있지만, VSCode에 대해 더 공부해야할 게 많습니다. 이 게시물이 VSCode를 사용하지 않았던 개발자들에게 도움이 되길 바랍니다. 감사합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Thu, 21 Dec 2023 15:37:19 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID QA 절차 및 업무 방식 소개]]></title>
			<dc:creator><![CDATA[윤시온]]></dc:creator>
			<link>https://www.cubrid.com/blog/3843189</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3843189</guid>
						<comments>https://www.cubrid.com/blog/3843189#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;큐브리드의 QA 절차 및 업무 방식에 대해 소개하겠습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;CUBRID QA팀이 하는 일?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; QA(Quality Assurance)팀은 CUBRID의 품질 보증에 대한 전반적인 절차를 다루는 업무를 맡고 있습니다.&nbsp;단순 테스트뿐만 아니라, 개발 프로세스에 직간접적인 관여와 QA Tool 확장 및 유지보수, 제품 결함 관리, 제품 릴리즈 등 제품이 출시되는 과정에서 여러가지 일을 하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;특히, 개발과정의 처음부터 끝까지 참여하여 품질 저하에 문제가 될 만한 부분이 있는지 검증하고, 개선안을 제안하는&nbsp;등 개발 프로세스 전반적으로 개입하여 제품 품질을 높이는 일을 하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/ed890efeb4472f9d07e8fafa15f1ddf0.png&quot; alt=&quot;CUBRID QA.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;CUBRID QA 절차&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; CUBRID QA 절차는 크게 다음과 같이 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/769a7150b4a8a1140db2db699e0bf845.png&quot; alt=&quot;CUBRID QA절차.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;각 절차에 대한 상세한 과정은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;1. Kick off 참여&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-먼저, 개발팀으로부터 프로젝트를 할당 받으면, 킥오프를 참여합니다. 요구사항 및 목표를 파악하고, 사용자 관점에 부합하지 않을 경우 개선을 요청합니다. 프로젝트에 따라 검증방법이나 절차가 달라질 수도 있고 때에 따라 새로운 환경이 필요할 수 있기 때문에 여러 가지 의견들을 종합하여 팀 내 담당자를 선정합니다.&nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;2. 테스트 환경 구축&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-프로젝트를 위해 어떤 테스트가 필요한지에 대한 분석이 끝났다면, QA를 진행할 환경을 구축합니다. 만약 기존 구축되어 있는 테스트 환경이 요구사항을 충족시키지 못한다면 직접 환경을 설정하여 테스트를 수행하거나, 직접 테스트 프로그램을 만들기도 합니다. 제작된 테스트 프로그램이 장기적으로 유효한 테스트라고 판단될 시 regression test에 추가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;3. 테스트 시나리오 수립&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-프로젝트가 진행되면서 사용자 예상 시나리오를 수립합니다. 일반적으로 테스트 시나리오는 유효한 입력을 사용한 긍정적 테스트와 유효하지 않은 입력을 고려한 부정적 테스트를 고려합니다. 그러나 비정상적인 상황은 너무나 다양하기 때문에 현실적으로 모든 부정 테스트의 시나리오를 수립하고 자동화하여 테스트하기는 불가능합니다. 때문에 최대한으로 다양하고 확장된 시나리오를 수립하는 것을 목표로 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;4. 테스트 케이스 작성&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-사용자 시나리오 수립이 완료되면, 시나리오를 검증하고 테스트 케이스를 작성합니다. 이때, 문제점이 발견될 시 JIRA에 보고합니다.&nbsp;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-테스트 케이스는 SQL문으로만 이루어진 경우엔&nbsp;SQL 테스트로, CUBRID 유틸리티나 프로세스 제어, 사용자의 동작 등이 테스트 시나리오에 포함된 경우는 shell 테스트 케이스로 작성하게 됩니다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-SQL, shell 테스트 이외에도 요구사항 목적에 맞는 테스트 프로그램의 테스트 케이스로 작성하게 됩니다.&nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;다음은 간단한 SQL 테스트 케이스와 답지의 예시입니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/7b176b67de3c4a75ddbf59fdf6ff19c6.png&quot; alt=&quot;sql testcase.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;sql 테스트 케이스 예시)&nbsp;cubrid-testcases/sql/cbrd_24478/deduplicate/cases/02_create_table1.sql&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/b48981499692828bccdc2d506def0a51.png&quot; alt=&quot;sql answer.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;sql 테스트 케이스 답지 예시) cubrid-testcases/sql/cbrd_24478/deduplicate/answers/02_create_table1.answer&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;5. 버그 리포팅&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-만약 제품 내 결함을 발견했다면, 버그 리포팅을 진행합니다. 버그는 보통 테스트 시나리오를 검증하는 테스트 케이스 작성 단계나, 테스트 수행 단계에서 주로 발견됩니다. 개발자와 구두로만 소통할 시, 히스토리 관리가 매우 어렵기 때문에 JIRA를 이용하여 기록을 남기는 것이 중요합니다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-버그리포트에는 core가 있다면 call stack 등의 core 정보, 테스트 버전, 재현절차, 기대결과, 실제결과 등의 내용이 포함됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;6. 테스트 수행&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-작성된 테스트 케이스는 Regression test에 포함됩니다. Regression test 결과를 분석하여 새로 작성된 테스트 케이스의 결과가 통과하였는지, 그리고 기존 제품의 영향도나 버그가 있는지 확인합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-size:18px;&quot;&gt;7. 프로젝트 종료&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;-이슈가 발생하지 않았을 경우, 프로젝트를 종료하고 결과 및 관련 내용을 JIRA를 이용해 기술합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 각 프로젝트들은 이러한 과정을 거쳐 QA의 검증이 완료되면 계획된 하나의 버전으로 빌드 및 배포가 이루어지게 됩니다. 또, 배포 이후 발생한 문제점이나 제품 성능 등에 대해 신속히 대처하여 추가적인 버전 관리를 수행합니다. 이처럼 QA팀은 프로젝트 기획 단계부터 시작하여 릴리스 하기까지 비즈니스 리스크를 줄이면서 최대한 이상적인 제품을 제공하기 위해 개발팀과 상시적으로 교류하고 더 나은 방향을 제안하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;CUBRID QA TOOL&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; CUBRID QA팀은 자체적인 QA솔루션 툴인 CTP(CUBRID Test Program)를 사용하고 있습니다. 효율적인 QA를 위해 이 툴을 사용하며, 자동화된 Regression test 수행 및 QA home을 통한 결과를 확인을 할 수 있습니다. 확인 중 발견된 버그는 JIRA(=Bug tracking system)를 이용하여 관리합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;strong&gt;1. QA HOME&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;&nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 먼저, QA home에 대해 자세히 알아보겠습니다. QA home은 Regression test나 커버리지 테스트가 수행되었을 때, 테스트 결과를 관리 및 공유할 수 있는 웹 페이지입니다. 개발팀에서 수정한 코드가 commit되면 자동적으로 Jenkins에서 CUBRID 빌드가 진행되며, 빌드가 성공적으로 완료되면 regression test를 수행하게 됩니다. 테스트 결과는 QA home 웹페이지와 연동되어 있어 히스토리 추적 및 관리를 용이하게 할 수 있습니다.&lt;br /&gt;
&nbsp; Regression test에는 sql/medium 등 개별적인 동작 기능이 미리 정의된 사양을 준수하는지 테스트하는 functional test 와 YCSB, Sysbench, HA Replication Delay Time, DOTS-Stress, TPC-W, TPC-C 등 안정성, 신뢰성과 같은 성능을 검증하는 performance test로 이루어져 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;1-1)&nbsp;Functional test&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 다음은 Functional test의 결과 페이지입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/1f3134829facfc7b920405c13c5ad3dd.png&quot; alt=&quot;qahome.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;qahome 웹페이지 화면&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Functional test에서는 Fail이 발생했을 경우, Fail count 숫자를 클릭하면 아래의 화면과 같이 테스트케이스의 실패 내역 리스트가 나옵니다. &nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/4ab1b7425989cc693ca86630f9078046.png&quot; alt=&quot;qahome fail case.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;qahome fail case 화면&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Case file 리스트에 있는 테스트케이스를 클릭하면 테스트의 결과내용을 좀 더 자세히 볼 수 있고, 이 정보를 토대로 왜 테스트가 실패했는지 분석합니다. 실패의 원인은 다양합니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 첫째로, 답지의 수정이 필요한 경우입니다. 최근에 개발팀에서 의도하지 않은 통계 업데이트를 막고자 &lsquo;UPDATE STATISTICS&rsquo; 구문으로만 통계 업데이트가 되도록 하는 기능이 추가되었습니다. 그로 인해, show index 구문이 들어간 테스트 케이스들의 답지에서 통계 부분이 달라지는 현상이 있었습니다. 테스트 케이스들은 Git에서 각 테스트 별 레포지토리로 관리되고 있으므로, 해당하는 레포지토리에 직접 답지를 수정하여 pr(pull request)하고, 담당 개발자 및 QA팀원들의 리뷰를 거쳐 병합합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/caea85f4c42488c918a2508ba26d60e3.png&quot; alt=&quot;qa home fail case 상세 결과 화면.png&quot; style=&quot;&quot; /&gt;&lt;br /&gt;
QA home Fail case 상세결과화면&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 둘째로, 버그일 경우입니다. 다음은Isolation test에서 public 유저로 서브 쿼리를 실행했을 때 성능 저하가 발생하는 현상을 JIRA에 보고한 예시입니다. 버그일 경우에는 담당 개발자가 JIRA 내용을 보고 분석하여 해결하는 과정을 거칩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/59c7945c105c8aea265333fa96727363.png&quot; alt=&quot;JIRA 버그리포팅 화면.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;JIRA 버그리포팅 화면&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;추가로 Core가 발생했을 경우는 Fail count 칸에 빨간 점멸등 아이콘으로 표시가 되고, 이를 JIRA에 보고합니다. Shell test의 경우에는 core를 자동으로 보고하는 기능이 탑재되어 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/1cdd3a5565b45907db12eacf1e3df434.png&quot; alt=&quot;core report 화면.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;shell test core report 화면&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 셋째로, 장비 환경에 문제가 있는 경우입니다. 장비 설정을 잘못 설정한 채로 테스트가 돌아가게 되면 해당 장비에서 실행된 테스트케이스들은 fail이 발생합니다. 이러한 경우는 설정을 올바르게 해주고 다시 실행하면 정상적인 결과가 도출됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;위와 같이 QA home에서 fail결과를 발견할 때는 상황을 분석하여 JIRA에 보고하거나 구두로 담당 개발자에게 해당 내용을 정리해서 전달합니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;1-2)&nbsp;Performance test&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;다음은 Performance test의 결과 페이지입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/435a85bfedc0db41d9ada5d8d65dc7cd.png&quot; alt=&quot;qahome performance 결과 화면.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;QAhome Performance 결과 화면&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;font-size:16px;&quot;&gt;Performance test는 CUBRID 데이터베이스 시스템의 성능을 측정하고 버전 별로 비교하는 데에 의의가 있으며, 사용되는 일반적인 작업 부하를 시뮬레이션하고 각 시스템이 이러한 부하에서 어떻게 수행되는지를 측정하여 평가합니다. Functional test와 마찬가지로, 성능에 문제가 있는 것으로 보일 경우 JIRA에 보고합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;신규 기능뿐만 아니라 기존 기능에 대해서도 품질을 유지하는 것이 중요하기 때문에 Regression test의 결과를 유지 및 관리하고 분석하는 업무는 매우 중요합니다. 앞서 설명했듯이, 기존 동작에 문제가 생겼다면 원인을 파악하고 개발팀과 논의하여 문제를 해결합니다. &nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;1-3)&nbsp;Code coverage&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;QA home에 탑재된 다양한 테스트들은 소프트웨어 품질 지표인 코드 커버리지 테스트로 관리되고 있습니다. 코드 커버리지는 현재의 테스트들로 전체 소스코드가 얼마나 수행되고 있는지에 대한 수치를 나타내며, QA팀에서는 커버리지 수치를 유지 및 향상시키는 노력을 하고 있습니다. &nbsp;다음은 코드 커버리지 테스트의 수행 결과 페이지이며, 항목별로 간단히 설명 드리도록 하겠습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/845e8990b6643d43dbf8924359aa84aa.png&quot; alt=&quot;qahome code coverage 결과 화면.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;QAhome code coverage 화면&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/76d40e3e89cfe50760470d2104cc4dec.png&quot; alt=&quot;code coverage 상세1.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/189/843/003/80cc162ddc4e658b57d06f41b0f56217.png&quot; alt=&quot;code coverage 상세2.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;br /&gt;
&lt;span style=&quot;font-size:16px;&quot;&gt;①&nbsp;&nbsp; &nbsp;Current view : top level&lt;br /&gt;
현재 수행된 커버리지 테스트는 top level커버리지이며, 이는 프로그램 또는 모듈 전체에서 코드가 얼마나 실행되었는지를 나타내는 메트릭 중 하나입니다.&lt;br /&gt;
②&nbsp;&nbsp; &nbsp;Test: 11.3.0.0957-baed85b 빌드 버전으로 Coverage Test를 수행한 결과를 의미합니다.&lt;br /&gt;
③&nbsp;&nbsp; &nbsp;Date: 테스트가 끝난 시점을 의미합니다.&lt;br /&gt;
④&nbsp;&nbsp; &nbsp;Category: 커버리지 테스트에 사용된 테스트들의 리스트이며, 각각의 테스트를 클릭하면 해당 테스트에서의 커버리지 수치를 볼 수 있습니다.&lt;br /&gt;
⑤&nbsp;&nbsp; &nbsp;Legend: code coverage report에서 사용된 색상에 대한 설명입니다. 75%미만은 빨강, 75%이상은 노랑, 90%이상은 연두색으로 표현되어 있습니다.&lt;br /&gt;
⑥&nbsp;&nbsp; &nbsp;커버리지 테스트에서 &ldquo;Hit&rdquo;는 일반적으로 특정 코드 또는 프로그램의 실행 경로에 따라 어떤 코드 블록, 라인, 함수 등이 실행되었음을 나타냅니다. 위 커버리지 테스트에서 Hit한 코드라인의 개수는 총 303688입니다.&lt;/span&gt;&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;strong&gt;2. CTP&nbsp;(CUBRID Test Program)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; CTP는 CUBRID의 function test들을 수행하기 위해 만들어진 테스트 툴입니다. SQL/MEDIUM/SQL_BY_CCI, Shell, HA_repl, Isolation, RQG, Unit test, JDBC, Code Coverage 등의 테스트들을 수행할 수 있고, git clone을 통해 CTP를 다운로드 받을 수 있습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;가이드 문서를 참조하여 장비 설정 후, 테스트를 수행할 수 있습니다. (각 테스트들의 가이드 문서는 https://github.com/CUBRID/cubrid-testtools/tree/develop를 참조). &nbsp;CTP에 대해서는 추후 더 자세하게 소개하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;이처럼 CUBRID QA팀은 기본적으로 QA home, CTP를 통해 업무를 진행하고, Git, Jira를 이용하여 전체 프로젝트를 관리하고 있습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;마무리하며&nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; 지금까지 CUBRID QA팀의 업무 방식 및 검증 프로세스를 간단하게 소개했습니다. &ldquo;품질은 QA 전문가의 노력만으로 높아지지 않는다.&rdquo;라는 말이 있습니다. 품질을 향상시키고, 좋은 제품을 제공하기 위해서는 모든 구성원이 협력해야 합니다. CUBRID는 모든 구성원이 버그 리포팅 및 버그 수정을 하고 있으며, 품질 향상에 기여하는 일에 협력하고 있습니다. QA팀도 다양한 QA활동을 통해 단순히 테스트를 하는 것이 아닌, 정확한 요구사항 분석에 기반한 품질 높은 제품을 만들어 나가도록 노력하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Fri, 17 Nov 2023 18:20:14 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID의 개발 문화: CUBRID DBMS 프로젝트 빌드 가이드와 빌드 시스템 개선]]></title>
			<dc:creator><![CDATA[유형규]]></dc:creator>
			<link>https://www.cubrid.com/blog/3842513</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3842513</guid>
						<comments>https://www.cubrid.com/blog/3842513#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h1&gt;&lt;span style=&quot;font-size:28px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;시작하며&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이전 포스팅에서 CUBRID의 개발 문화: CUBRID DBMS는 어떻게 개발되고 있을까? 라는 주제로 블로그 글을 작성했었던 기억이 납니다. 날짜를 들여다보니 2021년 4월 29일에 작성되었으니 코로나 팬데믹을 이겨내고 CUBRID에서 여러 프로젝트를 진행하느라 시간이 훌쩍 지나갔네요. 그 사이 CUBRID는 11.2 (elderberry) 버전 릴리즈를 지나 11.3 (fig) 버전 릴리즈를 앞두고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이번에도 마찬가지로 [CUBRID의 개발 문화]라는 말머리를 가지고 &lt;strong&gt;CUBRID DBMS 프로젝트 빌드&lt;/strong&gt;에 대한 이야기를 해보려고 합니다. 이전 포스팅의 &lsquo;CUBRID DBMS는 어떻게 개발되고 있을까?&rsquo;에서 소개했던 &lt;strong&gt;개발 프로세스&lt;/strong&gt;와 &lt;strong&gt;프로젝트 기여 가이드&lt;/strong&gt;의 내용과 조금 주제가 달라보일 수 있는데, 프로젝트 빌드에 대한 내용이 어떻게 개발 문화로까지 이어질 수 있는지 소개해 드리려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-size:28px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;빌드 준비하기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;누군가 코드를 기여하려고 할 때 빌드는 가장 먼저 해야 하는 첫 발걸음이면서, 동시에 제일 첫 번째로 마주하는 어려움입니다. 먼저 개발 환경에서 프로젝트를 빌드하기 위해서 여러 도구와 라이브러리를 설치하고, 프로젝트의 빌드 방법을 알아야 합니다. 이 때 기여하려는 개발자는 여러가지 어려움을 겪을 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;예를 들어:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;(1) 나의 개발 환경에서 빌드가 가능한지 모름&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;(2) 필요한 개발 환경 (예를 들어 C++ 컴파일러), 라이브러리와 관련 도구를 어떤 것을 미리 설치해야 하는지 모름&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;(3) 빌드 필요 요소 (Build Requirements) 의 최소/권장 버전과 설치 경로를 모름&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;(4) 빌드 시스템/도구를 어떻게 사용하는지 모름&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이러한 어려움에 대해서 물어보고 답을 받을 수 있는 커뮤니티 창구가 있으면 도움이 될 수도 있습니다. 하지만 대부분의 오픈소스 커뮤니티에서는 이러한 커뮤니티 창구가 없거나, 충분히 활성화 되어있지 않아서 답을 받아보지 못하거나 오랜 시간이 걸리게 됩니다. 많은 사람들이 이 단계에서 기여하기를 그만두게 될 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-size:28px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;빌드 준비를 도와주기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;가이드 문서 작성하기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;빌드를 시작해보기에 어려움을 겪을 수 있는 개발자를 도와주기 위해 &lt;strong&gt;빌드를 위한 가이드 문서&lt;/strong&gt;를 코드와 함께 작성해야 합니다. 위의 &lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lsquo;빌드 준비하기&rsquo;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt; 에서의 어려움을 겪는 예를 기반으로 어떤 내용을 적어주면 좋을지 설명하면서 CUBRID 프로젝트의 사례를 소개합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;나의 개발 환경에서 빌드가 가능한지 모름:&lt;/strong&gt; 프로젝트를 빌드 가능한 OS와 그 버전에 대해 명시해주는 것이 좋습니다. 만약 주기적으로 여러 OS 환경과 버전에서 빌드 테스트를 (Continous Testing) 수행하고 있다면 그것을 보여줌으로써 더 확실한 정보가 될 수 있을 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;필요한 개발 환경, 라이브러리와 관련 도구를 어떤 것을 미리 설치해야 하는지 모름:&lt;/strong&gt; 기본적으로 C++ 컴파일러의 버전이나 자바 버전과 같은 지원하는 컴파일러와 함께 사용하는 라이브러리, 빌드 도구들을 어떤 걸 설치 해야하는지 알려주면 좋습니다. 만약 자동으로 설치된다면 어떤 것들이 설치될지도 알려준다면 혹시 이미 내 환경에 설치된 것과 충돌이 발생하지 않는지 확인할 수 있습니다. 아무런 정보 없이 빌드를 하면서 반복해서 빌드를 실패하고, 순식간에 지나가는 출력 속에서 에러를 찾아 헤매지 않도록 해야합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;빌드 필요 요소의 최소/권장 버전과 설치 경로를 모름:&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt; 특히 &lsquo;yum&rsquo;, &lsquo;apt&rsquo;와 같은 패키지 설치 도구에서 &lsquo;yum install g++&rsquo;, 또는 &lsquo;apt-get install cmake&rsquo;와 같이 명령을 입력했을 때 리눅스 배포판이나 그 버전에 따라 기본적으로 설치되는 버전이 다르므로 빌드가 가능한 명확한 버전을 알려주어야 합니다. 또 패키지 설치 도구를 통하지 않고 라이브러리르 직접 설치하거나 빌드해야 하는 경우에는 다운로드 받을 수 있는 경로를 적어주어야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;빌드 시스템/도구를 어떻게 사용하는지 모름:&lt;/strong&gt; 프로젝트의 작성 언어나 플랫폼에 따라 다양한 빌드 도구를 사용할 수 있습니다. 자바 기반 프로젝트에서 사용하는 Ant, Maven, Gradle나 C/C++에서 Make, SCons, CMake, Ninja 등 다양한 빌드 시스템/도구가 있습니다. 이러한 빌드 시스템을 사용하여 작성한 스크립트를 처음부터 파악하기는 매우 어렵습니다. 같은 빌드 시스템을 사용하는 프로젝트라도, 빌드를 수행할 때 도구에게 넘겨주어야 하는 파라미터가 다르고 그 스크립트를 작성하는 컨벤션이 다를 수 있어 이해하지 못할 수 있습니다. 따라서 개발자가 기본적인 설정으로 쉽게 빌드해볼 수 있는 명령어나 스크립트를 제공해주어야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;CUBRID의 사례&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/e28db0fb379c334683e211569d1e6bb6.jpg&quot; alt=&quot;guide.jpg&quot; width=&quot;598&quot; height=&quot;556&quot; style=&quot;width: 598px; height: 556px;&quot; /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;CUBRID의 경우에는 최근 fig에서 업데이트 된 README 파일에서 Linux 와 Windows 환경에서 빌드할 수 있음을 소스로 부터 빌드 가이드에서 알려주고 있습니다. CUBRID의 엔진은 주로 C++로 구현되어 있지만, 저장 루틴 기능은 Java를 사용하고 있어서 C++ 컴파일러와 JDK 버전에 대해 명시하고 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;빌드 시스템은 CMake를 사용하고 있습니다. CMake는 빌드 시스템에서 필요로 하는 파일을 유연하게 생성할 수 있는데, 그런 만큼 꽤나 어렵게 느낄 수 있습니다. 특히 빌드 도구에 넘겨줄 수 있는 여러 파라미터에 따라 디버그/릴리즈와 같이 다른 모드로 빌드할 수 있습니다. 이런 파라미터를 잘 지정할 수 있도록, 복잡한 빌드를 좀 더 쉽게 하기 위해서 CUBRID는 Linux에서 &lt;a href=&quot;http://build.sh&quot;&gt;build.sh&lt;/a&gt;, Windows에서 build.bat을 제공하고 있습니다. 다음은 ./build.sh -h 명령어로 사용법을 출력한 예입니다.&lt;/span&gt;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:650px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;Usage: ./build.sh [OPTIONS] [TARGET]&lt;br /&gt;
			&nbsp;OPTIONS&lt;br /&gt;
			&nbsp; -t arg &nbsp;Set target machine (32(i386) or 64(x86_64)); [default: 64]&lt;br /&gt;
			&nbsp; -m &nbsp; &nbsp; &nbsp;Set build mode(release, debug or coverage); [default: release]&lt;br /&gt;
			&nbsp; -i &nbsp; &nbsp; &nbsp;Increase build number; [default: no]&lt;br /&gt;
			&nbsp; -a &nbsp; &nbsp; &nbsp;Run autogen.sh before build; [default: yes]&lt;br /&gt;
			&nbsp; -g &nbsp; &nbsp; &nbsp;Specifies the generator for a build (make, ninja); [default: make]&lt;br /&gt;
			&nbsp; -c opts Set configure options; [default: NONE]&lt;br /&gt;
			&nbsp; -s path Set source path; [default: current directory]&lt;br /&gt;
			&nbsp; -b path Set build path; [default: &lt;source path&gt;/build_&lt;mode&gt;_&lt;target&gt;]&lt;br /&gt;
			&nbsp; -p path Set prefix path; [default: &lt;build_path&gt;/_install/CUBRID]&lt;br /&gt;
			&nbsp; -o path Set package output path; [default: &lt;build_path&gt;]&lt;br /&gt;
			&nbsp; -j path Set JAVA_HOME path; [default: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64]&lt;br /&gt;
			&nbsp; -z arg &nbsp;Package to generate (src,zip_src,shell,tarball,cci,jdbc,rpm,owfs);&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [default: all]&lt;br /&gt;
			&nbsp; -? | -h Show this help message and exit&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&nbsp;TARGET&lt;br /&gt;
			&nbsp; all &nbsp; &nbsp; Build and create packages (default)&lt;br /&gt;
			&nbsp; build &nbsp; Build only&lt;br /&gt;
			&nbsp; dist &nbsp; &nbsp;Create packages only&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&nbsp;EXAMPLES&lt;br /&gt;
			&nbsp; ./build.sh &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Build and pack all packages (64/release)&lt;br /&gt;
			&nbsp; ./build.sh -t 32 build &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 32bit release build only&lt;br /&gt;
			&nbsp; ./build.sh -t 64 -m debug dist &nbsp; &nbsp; # Create 64bit debug mode packages&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;CUBRID에서 사용하는 대부분의 의존 라이브러리들은 빌드할 때 CMake에서 함께 자동으로 설치하고 빌드하고 있는데, 의존 라이브러리를 다루는 빌드 스크립트 (3rdparty/CMakeLists.txt) 와 함께 의존 라이브러리의 목록과 버전을 적은 README 파일을 함께 참고할 수 있도록 하고 있습니다. 또 미리 개발자의 환경에 설치되어야 하는 빌드 필수 요소들에 대해서는 각 OS 환경에서 설치할 수 있는 스크립트를 다음과 같이 적어주고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;a href=&quot;https://github.com/CUBRID/cubrid/blob/develop/docs/install_build_requirements.md&quot;&gt;https://github.com/CUBRID/cubrid/blob/develop/docs/install_build_requirements.md&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;가이드 문서 개선하기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;가이드 문서를 작성하는 것은 많은 노력이 필요하지만 빌드를 해보면서 겪을 수 있는 모든 문제를 완벽히 해결해줄 수 없습니다. 이제는 기여를 기대해볼 차례입니다. 위의 내용을 따라 작성한 가이드로 잘 안내했다면, 문제가 발생하는 부분은 보통 사소한 부분입니다. 예를 들어 시간이 지나면서 최신 버전의 리눅스 배포판 버전을 사용하는 개발자의 환경에 기본적으로 설치되는 라이브러리의 버전이 너무 높다라거나 라이브러리를 설치할 때 환경변수를 설정하지 않았다와 같은 것입니다. 이런 문제의 보고와 가이드 문서 개선은 오픈소스 기여의 좋은 출발점입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;따라서 개발자가 오픈소스 세상에 발자취를 남길 수 있도록 문서를 별도의 웹사이트에서 따로 관리하기 보다는 가이드 문서를 소스 코드와 똑같이 기여할 수 있게 해야 한다고 생각합니다. 그것은 개발자들이 오픈소스에 기여하려는 이유와도 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;가상 환경 제공하기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;충분히 위의 내용과 같이 가이드 문서를 작성하더라도 개발자의 환경에서 이미 설치/설정된 라이브러리와 충돌 또는 잘못 설정된 환경 변수 등의 문제로 빌드 실패를 겪을 수 있습니다. 이 때 각 환경에 대해 트러블슈팅을 세세하게 제공해줄 수도 있지만 앞에서 설명한 것과 같이 아주 어려운 일입니다. 대신, 다음과 같은 도구를 이용하여 필요한 요소가 모두 갖추어진 가상 환경을 제공해주는 것도 하나의 방법입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;Docker (&lt;a href=&quot;https://www.docker.com/&quot;&gt;https://www.docker.com/&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;Vagrant (&lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;https://www.vagrantup.com/&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;CUBRID는 엔진 소스 코드의 높은 허들을 (복잡한 시스템에 대한 분석 비용) 낮추기 위해 오픈소스 커뮤니티에서 좀 더 모듈/프로젝트를 쉽게 기여할 수 있는 cubrid-contrib (&lt;a href=&quot;https://github.com/CUBRID/cubrid-contrib&quot;&gt;https://github.com/CUBRID/cubrid-contrib&lt;/a&gt;) 저장소를 운영하고 있습니다. CUBRID는 @lsahn-gh (&lt;a href=&quot;https://github.com/lsahn-gh&quot;&gt;https://github.com/lsahn-gh&lt;/a&gt;) 님이 최근 기여한 &lsquo;Sandbox&rsquo; 프로젝트를 통해 Docker 가상 환경에서 빌드/개발 환경을 제공하고 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;https://github.com/CUBRID/cubrid-contrib/tree/main/sandbox&quot;&gt;https://github.com/CUBRID/cubrid-contrib/tree/main/sandbox&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/a8310fb5fba444ba6f0ff5b127904db8.jpg&quot; alt=&quot;sandbox.jpg&quot; style=&quot;&quot; /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;또 아직 CUBRID 저장소에 반영하지 않았지만, Vagrant 환경에서 각 CUBRID 버전을 빌드하는 위한 가상 환경과 그 가이드도 참고할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;https://github.com/hgryoo/cubrid-vagrant-dev&quot;&gt;https://github.com/hgryoo/cubrid-vagrant-dev&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:28px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;이제 빌드하고 개발해보자 그런데..?&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이제 프로젝트에 기여하기 위한 첫 번째 산을 넘었습니다. 기여하기를 시작할 때 간단히 어떤 곳에 출력문을 추가해보거나 &lsquo;프로그램을 죽여보는&rsquo; 코드를 집어넣은 뒤 빌드하고 실행해보면서 기능을 넣어볼 곳을 분석하기도 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이제 점점 프로젝트의 코드를 분석해서 알아가고 새로운 기능을 넣어봅니다. 이제는 소스 코드를 고쳐보고 빌드하고 테스트하는 것을 반복하는 (FIX - BUILD - TEST) 행복한 (?) 무한 루프 속에 자연스럽게 들어왔습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이 때 프로젝트의 규모가 점점 더 커지다보면 한번의 루프를 반복하는 것도 꽤나 오랜 시간이 걸립니다. 예를 들어 겨우 코드 한줄 (!) 을 고쳐보고 테스트 하려고 하는데 거의 30분을 기다려야만 빌드가 완료됩니다. 이것은 점점 개발자의 생산성에 영향을 주기 시작합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;s&gt;(&lt;strong&gt;농담을 하자면&lt;/strong&gt;)&lt;/s&gt; 이제 30분 동안 문서도 작성해보고 방금 작성한 코드를 더 아름답게 바꿀 순 없을까 고민도 합니다. 그러다 이것을 반복하다보면 멍해지며 생각에 빠집니다. 아.. 최고의 복지는 제대로 일할 수 있게 해주는 것이라던데, 진행이 안되는구나. 역시 더 비싸고 좋은 장비를 사주었어야 하는걸까, 저 옆의 어디는 그거 준다던데...&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;아주 무서운(?) 농담이지만 개인적인 경험에 따르면 빌드 성능이&nbsp;개발자가 기능을 개발할 때 집중력과 적극성에 분명한 영향을 준다는 것을 강조하려는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;빌드 성능 개선하기&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;빌드 성능에 신경을 쓰는 것은 중요합니다. CUBRID와 같은 대규모 시스템의 경우에는 특히 빌드 시간이 꽤나 오래 걸립니다. CUBRID의 경우에는 Github의 Pull Request에서 매 commit 마다 빌드 테스트를 진행하므로 빌드 성능은 생산성에도, 비용에도 영향이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;빌드 성능을 개선하는 많은 방법이 있겠지만 대표적으로 &lt;strong&gt;증분 빌드&lt;/strong&gt;와 &lt;strong&gt;병렬 빌드&lt;/strong&gt;를 잘 지원하는 것이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;증분 빌드:&lt;/strong&gt; 규모가 큰 프로젝트를 빌드 할 때, 이전에 빌드 되었지만 최신 상태인 것은 다시 빌드하지 않도록 하는 것&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;병렬 빌드:&lt;/strong&gt; 빌드하면서 만들어지는 의존성과 오브젝트를 파악하여 병렬적으로 동시에 생성&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이러한 방법은 빌드 시스템이나 도구에서 제공하지만 빌드 도구를 잘 선택하고 스크립트를 잘 작성해야 충분한 성능을 이끌어낼 수 있습니다. 빌드 성능을 개선하는 방법에 대해 설명하자면 너무 길어지므로 CUBRID가 개선한 사례로 설명하려고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;CUBRID는 &lt;strong&gt;Linux 환경&lt;/strong&gt;에서 기본적으로 사용하고 있던 Make를 사용하고 있었는데, 빌드 성능을 저해하는 몇 가지 문제가 있었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;빌드 스크립트의 버그:&lt;/strong&gt; 의존 라이브러리에 대한 의존성이 제대로 설정되지 않아 병렬 빌드에 성능 저하가 발생&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;&lt;strong&gt;Make는 너무 느리고 무겁다:&lt;/strong&gt;&lt;/strong&gt; Make 도구는 오랜 역사를 지닌 만큼 많은 것들을 고려하고 있어 비교적 빌드 속도가 느림&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;병렬 빌드를 위한 CPU 개수 확보:&lt;/strong&gt; CUBRID는 Circle CI에서 빌드 테스트를 매 commit 마다 수행하는데 사용하는 Docker Containor의 CPU 개수가 적음&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;위의 문제를 기반해서 먼저 빌드 스크립트의 의존성을 제대로 설정하도록 수정하고, Circle CI에서 CPU를 2개만 제공하는 Medium을 Large로 변경했습니다. 또 Make보다 비교적 가볍고 빠른 Ninja 빌드 시스템으로 빌드할 수 있도록 도입했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;다음의 결과로 보면 CUBRID 11.0 에서 12분이 걸리던 빌드 속도가 거의 절반인 6분으로 줄어든 것을 볼 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/16fb388e22c610ad368fc50a3fd63874.jpg&quot; alt=&quot;linux_perf.jpg&quot; style=&quot;&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;CUBRID의 &lt;strong&gt;Windows 환경&lt;/strong&gt;에서는 Appveyor에서 MSVC로 빌드하는데, 거의 30분 넘게 빌드를 기다려야 합니다. Appveyor는 오픈소스 커뮤니티 플랜의 경우에는 무조건 1 CPU로만 동작하기 때문에 병렬 빌드가 동작하지 않습니다. 따라서 충분한 자원을 확보해주고, &lt;strong&gt;병렬 빌드&lt;/strong&gt;가 작동하도록 개선했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/6418e603b400c3c84cb7e24cbf7078ea.jpg&quot; alt=&quot;windows_old_perf.jpg&quot; style=&quot;&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;개선 결과를 보면 Appveyor에서 거의 &lt;strong&gt;31분&lt;/strong&gt;이 걸리던 빌드가 Circle CI에서 거의 &lt;strong&gt;13분&lt;/strong&gt; 수준으로 향상된 것을 볼 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/cff75985cf2acd23b8c5b708605f6503.jpg&quot; alt=&quot;windows_new_perf.jpg&quot; style=&quot;&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;Circle CI에서 &lt;strong&gt;Linux (build &rarr; test)&lt;/strong&gt;와 &lt;strong&gt;Windows 환경 (build-windows)&lt;/strong&gt;에서 테스트를 보면, 거의 동시에 끝나는 것을 볼 수 있어 각 테스트 워크플로우가 끝날 때마다 함께 대응할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/513/842/003/eeddfa9d62d54231fc57efe33ae98e3d.jpg&quot; alt=&quot;total_perf.jpg&quot; style=&quot;&quot; /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h1&gt;&lt;span style=&quot;font-size:28px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;마무리&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;빌드에 대한 가이드는 프로젝트에 새로 합류하는 개발자의 좀 더 편안한 온보딩에 도움을 주고 그 비용을 줄여줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;또 프로젝트에서 릴리즈 노트에 적히는, 눈에 보이는 기능 개발이나 성능 개선도 중요합니다. 그러나 어떻게 보면 눈에 보이지 않을 수 있는 빌드에 대한 개선은 개발자들이 코드를 작성하고 기여하는 활동 (코드 리뷰, 피드백에 대응하고 수정하는) 에 영향을 주어 &lt;strong&gt;프로젝트의 지속적인 발전의 윤활유&lt;/strong&gt;가 될 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-size:20px;&quot;&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;다음의 링크에서 위에서 소개한 빌드 가이드와 개선 사항에 대한 이슈를 참고할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;[1] 빌드 가이드 문서: &lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-21500&quot;&gt;http://jira.cubrid.org/browse/CBRD-21500&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;[2] 병렬 빌드 버그 수정:&lt;/span&gt;&lt;/span&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-23963&quot;&gt;http://jira.cubrid.org/browse/CBRD-23963&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
		&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-24627&quot;&gt;http://jira.cubrid.org/browse/CBRD-24627&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;[3] 의존성 라이브러리 개선:&lt;/span&gt;&lt;/span&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-24490&quot;&gt;http://jira.cubrid.org/browse/CBRD-24490&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;[3] Ninja 빌드 시스템 도입:&lt;/span&gt;&lt;/span&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-24570&quot;&gt;http://jira.cubrid.org/browse/CBRD-24570&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;[4] Windows 빌드 CI 개선:&lt;/span&gt;&lt;/span&gt;
	&lt;ul&gt;
		&lt;li&gt;&lt;span style=&quot;font-family:lucida sans unicode,lucida grande,sans-serif;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a href=&quot;http://jira.cubrid.org/browse/CBRD-24528&quot;&gt;http://jira.cubrid.org/browse/CBRD-24528&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;]]></description>
						<pubDate>Fri, 08 Sep 2023 16:19:02 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CSQL에서 PreparedStatement 사용하여 Query Plan 확인하기]]></title>
			<dc:creator><![CDATA[김지원]]></dc:creator>
			<link>https://www.cubrid.com/blog/3841709</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3841709</guid>
						<comments>https://www.cubrid.com/blog/3841709#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h2&gt;&lt;strong&gt;CSQL&lt;/strong&gt;&lt;strong&gt;에서 PreparedStatement 사용하여 Query Plan 확인하기&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p paraeid=&quot;{2506de7b-6fa5-4982-9afd-ef0da00791ec}{174}&quot; paraid=&quot;1478808527&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;Prepare statement를 이용하여 값을 질의에 포함하지 않고 bind 했을 경우와 질의상에 값을 직접 포함하였을 경우, &lt;/span&gt;&lt;/p&gt;

&lt;p paraeid=&quot;{2506de7b-6fa5-4982-9afd-ef0da00791ec}{174}&quot; paraid=&quot;1478808527&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;일부 상황에서 값에 대한 해석이 모호해져 질의 플랜이 다르게 만들어져 질의의 성능이 달라지는 경우가 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p paraeid=&quot;{2506de7b-6fa5-4982-9afd-ef0da00791ec}{174}&quot; paraid=&quot;1478808527&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;이를 위해 csql 에서 prepare statement 사용하는 방법을 정리하였습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p paraeid=&quot;{ecd69cf9-9444-4b17-a095-b8bc95b9df11}{67}&quot; paraid=&quot;21763655&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;아래 확인 예시는 11.2 에서 해결된 부분이나, 그 이전 부분에서 질의 수행 계획이 달라졌음에 대한 이해를 위해 사용하였습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;CSQL에서 PreparedStatement 사용&lt;/strong&gt;&lt;/h3&gt;

&lt;table border=&quot;2&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;1. Prepared Statement 생성&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;PREPARE stmt_name FROM &#39;sql문&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;2. Prepared Statement 실행&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;EXECUTE stmt_name [USING value, value2 ...];&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;3. Prepared Statement 해제&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;{DEALLOCATE | DROP} PREPARE stmt_name;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;&nbsp;사용 예시(2가지)&lt;/strong&gt;&lt;/h4&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;1.&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp;csql &gt; PREPARE pstmt FROM &#39;SELECT 1 + ?&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&nbsp; csql &gt; EXECUTE pstmt USING 4;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&nbsp; csql &gt; DROP PREPARE pstmt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;2.&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp; &nbsp;csql &gt; PREPARE pstmt FROM &#39;SELECT col1 + ? FROM tbl WHERE col2 = ?&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&nbsp; csql &gt; SET @a=3, @b=&#39;abc&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&nbsp; csql &gt; EXECUTE pstmt USING @a, @b;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&nbsp;&nbsp; csql &gt; DROP PREPARE pstmt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;span style=&quot;color:#0000FF;&quot;&gt;preparedstatement 사용법의 자세한 내용은 아래 링크의 매뉴얼을 참고하세요.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;a aria-label=&quot;링크 https://www.cubrid.org/manual/ko/11.2/sql/query/prepare.html&quot; href=&quot;https://www.cubrid.org/manual/ko/11.2/sql/query/prepare.html&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot; title=&quot;https://www.cubrid.org/manual/ko/11.2/sql/query/prepare.html&quot;&gt;&lt;span style=&quot;color:#0000FF;&quot;&gt;https://www.cubrid.org/manual/ko/11.2/sql/query/prepare.html&lt;/span&gt;&lt;/a&gt; &nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;hr /&gt;
&lt;h3&gt;&nbsp;&lt;/h3&gt;

&lt;h3&gt;&lt;strong&gt;Query Plan 확인 예시&lt;/strong&gt;&lt;/h3&gt;

&lt;table border=&quot;2&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;csql &gt;;trace on&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;1. BIND 사용&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;PREPARE pstmt FROM &#39;&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;SELECT /*+ recompile */&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;(&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SELECT&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;COUNT(id)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tbla&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WHERE&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;id = a.id&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;) col1,&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;(&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SELECT&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;NVL(MAX(TO_NUMBER(SUBSTR(id, 5))), 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tbla&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WHERE&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;id LIKE SUBSTR(?, 1, 3) || &#39;&#39;%&#39;&#39;&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AND id IS NOT NULL&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;) col2&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp;&nbsp; &nbsp;tbla a&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;LIMIT ?, ?&#39;;&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;EXECUTE pstmt USING &#39;A123456&#39;, 10, 10;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;~&lt;/p&gt;

			&lt;p&gt;2 command(s) successfully processed.&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;Query Plan:&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; TABLE SCAN (tbla)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; rewritten query: (select nvl(max( to_number( substr(tbla.id, 5))), 0) from tbla tbla where tbla.id like &nbsp;substr( ?:0 , 1, 3)|| cast(&#39;%&#39; as varchar))&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; INDEX SCAN (tbla.idx1) (key range: tbla.id=a.id, covered: true)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; rewritten query: (select count(tbla.id) from tbla tbla where tbla.id=a.id)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; TABLE SCAN (a)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; rewritten query: select (select count(tbla.id) from tbla tbla where tbla.id=a.id), (select nvl(max( to_number( substr(tbla.id, 5))), 0) from tbla tbla where tbla.id like &nbsp;su&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;bstr( ?:0 , 1, 3)|| cast(&#39;%&#39; as varchar)) from tbla a where (inst_num()&gt; ?:1 ) and (inst_num()&lt;= ?:1 + ?:2 )&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;Trace Statistics:&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; SELECT (time: 8, fetch: 84, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; SCAN (table: tbla), (heap time: 0, fetch: 21, ioread: 0, readrows: 21, rows: 21)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; SUBQUERY (uncorrelated)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; &nbsp; SELECT (time: 2, fetch: 13, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; SCAN (table: tbla), (heap time: 1, fetch: 13, ioread: 0, readrows: 5121, rows: 1024)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; SUBQUERY (correlated)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; &nbsp; SELECT (time: 5, fetch: 50, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#F0F8FF;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; SCAN (index: tbla.idx1), (btree time: 4, fetch: 40, ioread: 0, readkeys: 10, filteredkeys: 0, rows: 10240, covered: true)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;2. 상수 사용&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;SELECT&nbsp;&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;(&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SELECT&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;COUNT(id)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tbla&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WHERE&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;id = a.id&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;) col1,&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;(&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;SELECT&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;NVL(MAX(TO_NUMBER(SUBSTR(id, 5))), 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;tbla&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;WHERE&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;id LIKE SUBSTR(&#39;A123456&#39;, 1, 3) || &#39;%&#39;&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;AND id IS NOT NULL&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;) col2&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;FROM&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp;&nbsp; &nbsp;tbla a&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;LIMIT 10, 10;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;~&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;Query Plan:&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; INDEX SCAN (tbla.idx1) (key range: (tbla.id&gt;= ?:4 &nbsp;and tbla.id&lt; ?:5 ), covered: true)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; rewritten query: (select nvl(max( to_number( substr(tbla.id, 5))), 0) from tbla tbla where (tbla.id&gt;= ?:4 &nbsp;and tbla.id&lt; ?:5 ))&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; INDEX SCAN (tbla.idx1) (key range: tbla.id=a.id, covered: true)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; rewritten query: (select count(tbla.id) from tbla tbla where tbla.id=a.id)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; TABLE SCAN (a)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; rewritten query: select (select count(tbla.id) from tbla tbla where tbla.id=a.id), (select nvl(max( to_number( substr(tbla.id, 5))), 0) from tbla tbla where (tbla.id&gt;= ?:4&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;and tbla.id&lt; ?:5 )) from tbla a where (inst_num()&gt; ?:0 &nbsp;and inst_num()&lt;= ?:1 )&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;Trace Statistics:&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; SELECT (time: 7, fetch: 76, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; SCAN (table: tbla), (heap time: 0, fetch: 21, ioread: 0, readrows: 21, rows: 21)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; SUBQUERY (uncorrelated)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; &nbsp; SELECT (time: 1, fetch: 5, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; SCAN (index: tbla.idx1), (btree time: 0, fetch: 4, ioread: 0, readkeys: 1, filteredkeys: 0, rows: 1024, covered: true)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; SUBQUERY (correlated)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; &nbsp; SELECT (time: 5, fetch: 50, ioread: 0)&lt;/span&gt;&lt;br /&gt;
			&lt;span style=&quot;background-color:#FFFFE0;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; SCAN (index: tbla.idx1), (btree time: 4, fetch: 40, ioread: 0, readkeys: 10, filteredkeys: 0, rows: 10240, covered: true)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;!--[endif]--&gt;&lt;!--![endif]--&gt;&lt;!--![if--&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;color:#808080;&quot;&gt;&lt;span style=&quot;font-size:8px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 위 예시 질의의&nbsp;서로 다른 plan 문제는&nbsp;현재(11.2) fix됨.&lt;/span&gt;&lt;/span&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;!--[if--&gt;&lt;!--[endif]--&gt;&lt;!--![endif]--&gt;&lt;!--![if--&gt;&lt;!--![endif]--&gt;&lt;!--![if--&gt;&lt;!--![endif]--&gt;&lt;!--![if--&gt;&lt;!--![endif]--&gt;&lt;!--![if--&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Thu, 11 May 2023 08:19:43 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[Index의 capacity에 관한 정보 열람]]></title>
			<dc:creator><![CDATA[사니조아]]></dc:creator>
			<link>https://www.cubrid.com/blog/3841615</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3841615</guid>
						<comments>https://www.cubrid.com/blog/3841615#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h1&gt;Index Capacity 정보&lt;/h1&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;들어가며&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;DBMS의 여러 기능 기능이나 구성 요소들 중에서 가장 중요한 것은 무엇일까요?&lt;br /&gt;
Index는 &#39;가장&#39; 중요한은 아니더라도 적어도 &#39;아주 아주&#39;&nbsp;중요한&nbsp;요소가 아닐까 생각 합니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;Index가 없다면 데이터를 쌓아 두기만 할 수 있을 뿐 사실상 관리는 못하는 그런 시스템이 될 테니까요.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;자료가 많으면 많을 수록 Index는 더 중요해 집니다.&lt;br /&gt;
&lt;br /&gt;
이렇게 중요한 Index를 분석할 때에도 목적에 부합하는 여러가지 도구와 방법들이 있을 수 있습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;이 페이지에서는 그 중에서 Index의 Capaicty에 대한 정보를 리뷰해 보고자 합니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;기본적인 사용 방법이나 설명은 매뉴얼을 통해 얻을 수 있으므로 여기서 설명은 생략합니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;INDEX CAPACITY 정보 얻기&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;우선&nbsp;CUBRID에서는 Index의 Capacity 정보를 다음과 같은 두 가지 방법으로 쉽게(?) 알아 볼 수 있습니다.&lt;/p&gt;

&lt;h3 style=&quot;margin-left: 40px;&quot;&gt;1. diagdb tool&lt;/h3&gt;

&lt;pre class=&quot;brush:plain&quot;  title=&quot;&quot;&gt;-------------------------------------------------------------
BTID: {{0, 5952}, 5953}, idx0 ON dba.tbl, CAPACITY INFORMATION:
Distinct Key Count: 0
Total Value Count: 0
Average Value Count Per Key: 0
Total Page Count: 2
Leaf Page Count: 1
NonLeaf Page Count: 1
Height: 2
Average Key Length: 0
Average Record Length: 0
Total Index Space: 32688 bytes
Used Index Space: 200 bytes
Free Index Space: 32488 bytes
Average Page Free Space: 16244 bytes
Average Page Key Count: 0
-------------------------------------------------------------&lt;/pre&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;h3 style=&quot;margin-left: 40px;&quot;&gt;&nbsp;2. SHOW INDEX CAPACITY 명령&nbsp;&lt;/h3&gt;

&lt;pre class=&quot;brush:plain&quot;  title=&quot;&quot;&gt;Table_name           : &#39;dba.tbl&#39;        
Index_name           : &#39;idx0&#39;        
Btid                 : &#39;(0|5952|5953)&#39;        
Num_distinct_key     : 0        
Total_value          : 0        
Avg_num_value_per_key: 0        
Num_leaf_page        : 1        
Num_non_leaf_page    : 1        
Num_total_page       : 2        
Height               : 2        
Avg_key_len          : 0        
Avg_rec_len          : 0        
Total_space          : &#39;31.9K&#39;        
Total_used_space     : &#39;200.0B&#39;        
Total_free_space     : &#39;31.7K&#39;        
Avg_num_page_key     : 0        
Avg_page_free_space  : &#39;15.9K&#39;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 80px;&quot;&gt;&lt;br /&gt;
위 두가지 수행 결과는 표현되는 키워드와 형식만&nbsp;약간 다를 뿐 사실 동일한 내용입니다.&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;INDEX CAPACITY 세부 항목&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;각 항목에 대한 설명을 &quot;SHOW INDEX CAPACITY&quot; 명령의 결과 기준으로 설명하면 아래 표와 같습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; width=&quot;1323&quot;&gt;
	&lt;tbody&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot; width=&quot;180&quot;&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;SHOW INDEX CAPACITY&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width=&quot;180&quot;&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;diagdb&nbsp;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width=&quot;280&quot;&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;의 미&lt;/p&gt;
			&lt;/td&gt;
			&lt;td width=&quot;&quot;&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;비고&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot;&gt;
			&lt;p&gt;Table_name&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;테이블 이름&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot;&gt;
			&lt;p&gt;Index_name&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;인덱스 이름&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;22&quot;&gt;
			&lt;td height=&quot;22&quot;&gt;
			&lt;p&gt;Btid&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;BTID 정보 (vol ID, file ID, root_page ID)&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Num_distinct_key&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Distinct Key Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;font&gt;전체 &lt;/font&gt;&lt;font&gt;leaf &lt;/font&gt;&lt;font&gt;페이지에 존재하는&lt;/font&gt;&lt;font&gt; Distinct key &lt;/font&gt;&lt;font&gt;개수&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Total_value&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Total Value Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;font&gt;인덱스에&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;저장된&lt;/font&gt;&lt;font&gt; OID &lt;/font&gt;&lt;font&gt;값&lt;/font&gt;&lt;font&gt;의&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;총&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;개수&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Avg_num_value_per_key&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Average Value Count Per Key&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;키 당 OID 값의 평균 개수&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;((Num_distinct_key &gt; 0) ? (Total_value / Num_distinct_key) : 0)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Num_leaf_page&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Leaf Page Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Non-Leaf &lt;font&gt;페이지&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;개수&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Num_non_leaf_page&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;NonLeaf Page Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;leaf &lt;font&gt;페이지&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;개수&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Num_total_page&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Total Page Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;font&gt;전체&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;페이지&lt;/font&gt;&lt;font&gt; &lt;/font&gt;&lt;font&gt;개수&lt;/font&gt;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Height&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Height&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;트리의 높이&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Avg_key_len&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Average Key Length&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;평균 키 길이&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;((Num_distinct_key &gt; 0) ? (&lt;span style=&quot;color:#808080;&quot;&gt;&lt;em&gt;sum_of_each_key_len&lt;/em&gt;&lt;/span&gt; / Num_distinct_key) : 0)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Avg_rec_len&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Average Record Length&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;평균 페이지 레코드 길이&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;((Num_distinct_key &gt; 0) ? (&lt;span style=&quot;color:#808080;&quot;&gt;&lt;em&gt;sum_of_each_record_len&lt;/em&gt;&lt;/span&gt; / Num_distinct_key) : 0)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Total_space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Total Index Space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;인덱스에 의해 점유되는 전체 공간&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Total_used_space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Used Index Space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;인덱스의 전체 사용 공간&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Total_space - Total_free_space&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Total_free_space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Free Index Space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;인덱스의 전체 여유 공간&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;　&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Avg_num_page_key&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Average Page Key Count&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Leaf 페이지 당 평균 키 개수&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;((Num_leaf_page &gt; 0) ? (Num_distinct_key / Num_leaf_page) : 0)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr height=&quot;24&quot;&gt;
			&lt;td height=&quot;24&quot;&gt;
			&lt;p&gt;Avg_page_free_space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;Average Page Free Space&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;전체 페이지 당 평균 여유 공간&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;((Num_total_page &gt; 0) ? (Total_free_space / Num_total_page) : 0)&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p style=&quot;margin-left: 40px;&quot;&gt;주1)&nbsp; v11.2.3 기준입니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;주2)&nbsp; 각각의 항목은 Overflow Page에 대한 정보를 포함하지 않은 상태로 보여 집니다.&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp;다만,&nbsp;Total_value 항목은 Overflow Page의 정보를 포함합니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;주3)&nbsp; Overflow Page영역의 정보는 이후 버전에서 포함 될 예정입니다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;사용해 보기1&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;우선 자료가 많지 않은 작은 테이블을 가지고 검토를 해 봅시다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;아래와 같이 동일한 구성의 두 테이블읋 준비해서 각각 50건과 500건을 입력합니다.&lt;/p&gt;

&lt;pre class=&quot;brush:sql&quot;  title=&quot;&quot;&gt;drop table if exists t1, t2;
create table t1(id int primary key, v1 int, v2 int);
create index idx1 on t1(v1);
create index idx2 on t1(v2);
create table t2 like t1;  

insert into t1 select rownum, rownum % 10, 1 from db_class a, db_class b, db_class c limit 50;
insert into t2 select rownum, rownum % 10, 1 from db_class a, db_class b, db_class c limit 500;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;아래 명령으로 Capacity 정보를 얻어 봅니다.&lt;/p&gt;

&lt;pre class=&quot;brush:sql&quot;  title=&quot;&quot;&gt;;line on
show all indexes capacity  of t1;
show all indexes capacity  of t2;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;아래에서 왼쪽은 t1 테이블 오른쪽은 t2 테이블에 대한 결과입니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;&lt;00001&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;idx1&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|5696|5697)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;10&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:&lt;span style=&quot;background-color:#AFEEEE;&quot;&gt; 50&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 5&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 84&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1000.0B&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;15.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 10&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;15.0K&#39;&lt;br /&gt;
			&lt;00002&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;idx2&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|5760|5761)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;50&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 50&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 804&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;928.0B&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;15.1K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;15.1K&#39;&lt;br /&gt;
			&lt;00003&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;pk_t1_id&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|5568|5569)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;50&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;50&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 20&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;14.7K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 50&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;14.7K&#39;&lt;/p&gt;

			&lt;p&gt;3 rows selected. (0.004562 sec) Committed. (0.000016 sec)&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;br /&gt;
			&nbsp;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;&lt;00001&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;idx1&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|5952|5953)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;10&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;500&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 50&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 804&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;8.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;8.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 10&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;8.0K&#39;&lt;br /&gt;
			&lt;00002&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;idx2&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6016|6017)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; :&lt;span style=&quot;background-color:#FFD700;&quot;&gt; 1&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;500&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 500&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 1380&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.5K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;14.5K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;14.5K&#39;&lt;br /&gt;
			&lt;00003&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.t2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;pk_t2_id&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|5824|5825)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;500&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#AFEEEE;&quot;&gt;500&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 20&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;11.8K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;4.1K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 500&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;4.1K&#39;&lt;/p&gt;

			&lt;p&gt;3 rows selected. (0.005187 sec) Committed. (0.000019 sec)&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;br /&gt;
			&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; &nbsp;&nbsp;Num_distinct_key와&nbsp;Total_value를 비교해서 보면&nbsp;pk_t1_id는 unique 하므로 입력된 레코드 건수와 키의 개수, Total_value의 개수가 동일함을 볼 수 있고,&lt;/p&gt;

&lt;p&gt;&nbsp; &nbsp;idx2는 레코드가 모두 동일한 값을 갖으므로 Total_value의 개수는 레코드 개수와 동일하지만&nbsp;Num_distinct_key는 항상 1임을 볼 수 있다.&lt;/p&gt;

&lt;p&gt;&nbsp; &nbsp;idx1은 키가 중복되어&nbsp;Num_distinct_key는 값이 일정 개수 이상으로 늘지 않고 있음을 볼 수 있다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;사용해 보기2&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;이제 데이터의 양을 늘려서 다른 부분들에 대해 검토 해 보겠습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;우선 아래와 같은 구문을 이용해서 테이블을 생성하고 데이터를 입력합니다.&lt;/p&gt;

&lt;pre class=&quot;brush:sql&quot;  title=&quot;&quot;&gt;drop table if exists tbl;
create table tbl(id int primary key, v1 int, v2 int, v3 int, s char(120));
create index idx1 on tbl(v1, s);
create index idx2 on tbl(v2, s);
create index idx3 on tbl(v3, s);

insert into tbl select rownum, rownum % 5000, rownum % 500, 1, &#39;cubrid string test&#39; from db_class a, db_class b, db_class c, db_class d limit 100000;
;line on
show all indexes capacity  of tbl;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;br /&gt;
이 상태에서 아래 명령으로 100건의 레코드를 삭제한 후의 상태와 전체를 모두 삭제한 후의 상태를 확인해 봅니다.&lt;/p&gt;

&lt;pre class=&quot;brush:sql&quot;  title=&quot;&quot;&gt;delete from tbl where id%1000 = 1;
show all indexes capacity  of tbl;

delete from tbl;
show all indexes capacity  of tbl;&lt;/pre&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;br /&gt;
아래의 표에서 비교해서 볼 수 있습니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;100000건 입력 후&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;100건 삭제 후&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p style=&quot;text-align: center;&quot;&gt;전체 삭제 후&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;&lt;00001&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6208|6209)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 5688&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100688&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 17&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 345&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 346&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 426&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 571&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;5.4M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;3.1M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;2.2M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 16&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;6.6K&#39;&lt;br /&gt;
			&lt;00002&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6272|6273)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 650&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100150&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 154&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 76&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 77&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 374&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 920&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;1.2M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;593.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;635.7K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 8&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;8.3K&#39;&lt;br /&gt;
			&lt;00003&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;idx3&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6336|6337)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100000&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 100000&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : &lt;span style=&quot;background-color:#00FFFF;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 485&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 1192&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;14.7K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;14.7K&#39;&lt;br /&gt;
			&lt;00004&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;&lt;span style=&quot;background-color:#FFFF00;&quot;&gt;pk_tbl_id&lt;/span&gt;&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6080|6081)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;100310&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#FFD700;&quot;&gt;100310&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 156&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 157&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 12&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;2.4M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.5M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;926.2K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 643&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;5.9K&#39;&lt;/p&gt;

			&lt;p&gt;4 rows selected. (6.017251 sec) Committed. (0.000028 sec)&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;&lt;00001&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6208|6209)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 5688&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100688&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 17&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 345&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 346&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 426&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 571&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;5.4M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;3.2M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;2.2M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 16&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;6.6K&#39;&lt;br /&gt;
			&lt;00002&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6272|6273)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 650&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100150&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 154&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 76&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 77&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 374&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 921&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;1.2M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;593.6K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;635.4K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 8&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;8.3K&#39;&lt;br /&gt;
			&lt;00003&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx3&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6336|6337)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 100000&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 100000&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : &lt;span style=&quot;background-color:#00FFFF;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 485&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 1192&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;14.7K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;14.7K&#39;&lt;br /&gt;
			&lt;00004&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;pk_tbl_id&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6080|6081)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;100310&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#FFD700;&quot;&gt;100310&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 156&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 157&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 12&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;2.4M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;1.5M&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;925.4K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 643&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;5.9K&#39;&lt;/p&gt;

			&lt;p&gt;4 rows selected. (0.016022 sec) Committed. (0.000017 sec)&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;br /&gt;
			&nbsp;&lt;/p&gt;
			&lt;/td&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/p&gt;

			&lt;p&gt;&lt;00001&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx1&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6208|6209)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 489&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 489&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 30&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 31&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 428&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 446&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;494.8K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;217.5K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;277.2K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 16&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;8.9K&#39;&lt;br /&gt;
			&lt;00002&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx2&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6272|6273)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 495&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 495&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 33&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 34&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 422&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 447&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;542.7K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;221.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;321.4K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 15&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;9.5K&#39;&lt;br /&gt;
			&lt;00003&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;idx3&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6336|6337)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 431&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 431&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 0&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : &lt;span style=&quot;background-color:#00FFFF;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 485&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 520&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;16.0K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;656.0B&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;15.3K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;15.3K&#39;&lt;br /&gt;
			&lt;00004&gt; Table_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;dba.tbl&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Index_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;pk_tbl_id&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Btid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &#39;(0|6080|6081)&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_distinct_key &nbsp; &nbsp; : &lt;span style=&quot;background-color:#FFD700;&quot;&gt;437&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &lt;span style=&quot;background-color:#FFD700;&quot;&gt;437&lt;/span&gt;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_value_per_key: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_leaf_page &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_non_leaf_page &nbsp; &nbsp;: 1&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Num_total_page &nbsp; &nbsp; &nbsp; : 5&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Height &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : 2&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_key_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 4&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_rec_len &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: 19&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: &#39;79.8K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_used_space &nbsp; &nbsp; : &#39;10.6K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Total_free_space &nbsp; &nbsp; : &#39;69.2K&#39;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_num_page_key &nbsp; &nbsp; : 109&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; Avg_page_free_space &nbsp;: &#39;13.8K&#39;&lt;/p&gt;

			&lt;p&gt;4 rows selected. (0.006074 sec) Committed. (0.000018 sec)&lt;/p&gt;

			&lt;p&gt;1 command(s) successfully processed.&lt;br /&gt;
			&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;이 비교 테이블 중에서 PK인&nbsp;pk_tbl_id에 대해서 우선 살펴 보겠습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;우선&nbsp;Num_distinct_key값이 각각 100000, 99900, 0 으로 표시 되지 않았음을 볼 수 있습니다. 이상하다고 생각되겠지만 이 값들은 사용자가 입력한 정보가 아니라 현재 Index의 상태를 보여주는 용도이기 때문입니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;우선 처음 100000개를 입력한 상태에서 100310으로 입력건수보다 많은 키가 존재하는 이유는 내부 처리 과정에서 FENCE_KEY와 같은 관리용 키가 생성되었기 때문입니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;100건을 삭제한 후에도 값이 줄지 않고 있는 이유는 삭제되었다고 해도 Index에 정보가 남아 있는 상태이기 때문입니다. 이런 정보는 VACUUM을 통해서 정리가 됩니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;전체 삭제 후에도 437개가 있는 것으로 표시되는 것은 VACUUM이 현재 수행 중이어서 정리를 하고 있는 중이기 때문입니다. 아직 전체 정리가 덜 된 상태라고 볼 수 있습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;이제 idx3 인덱스를 살펴 보겠습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;Num_total_page와 같은 페이지 수 정보를 보면 1로 변함이 없습니다. 다른 인덱스들이 데이터 양에 따라 페이지수의 변화가 있는데 비해 idx3는 항상 1개의 페이지만 가지고 있는 것처럼 보입니다.&nbsp; 그 이유는 현재 보여지는 정보에서는&nbsp;&nbsp;OID Overflow-pages에 대한 정보를 포함하고 있지 않기 때문에 그런 착각을 불러 일으키는 것입니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;u&gt;마무리&lt;/u&gt;&lt;/h2&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;인덱스의 Capacity 정보를 볼 때&nbsp; 혼동 할 만한 부분들에 대해서 간단하게 살펴 보았습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;현재 버전에서 아쉬운 점은 OID Overflow pages에 대한 정보가 없다는 것인데 이 부분은 차후 버전에서 개선 될 것입니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;새 버전에서 정보가 추가되면 다시 변경 사항에 대해 설명 드리겠습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&nbsp;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Wed, 26 Apr 2023 11:24:22 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID Internal: Disk Manager #1: 볼륨 헤더(Volume Header)와 섹터 테이블(Sector Table)]]></title>
			<dc:creator><![CDATA[김재은]]></dc:creator>
			<link>https://www.cubrid.com/blog/3841267</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3841267</guid>
						<comments>https://www.cubrid.com/blog/3841267#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;이전글:&nbsp;&lt;a href=&quot;https://www.cubrid.com/3825811&quot;&gt;CUBRID Internal: 큐브리드의 저장공간관리 (DIsk Manager, File Manager)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;&nbsp;&lt;/h2&gt;

&lt;h2 id=&quot;-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;볼륨은 어떻게 관리될까?&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;h4 id=&quot;-volume-header-sector-table-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;- 볼륨 헤더(Volume Header)와 섹터 테이블(Sector Table) -&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp;앞선 글에서 디스크&nbsp;매니저(Disk Manager)가 섹터의 예약(reservation)을 관리한다고 이야기하였다. 이번 글에서는 볼륨 내의 섹터들이 어떻게 관리되는지에 대한 구체적인 이야기와 이를 위해 볼륨이 어떻게 구성되어 있는지를 다룬다. 여기서 다루어지는 볼륨의 구조는 그대로 non-volatile memory (SSD, HDD 등)에 쓰여진다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3 id=&quot;-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨 구조&lt;/span&gt;&lt;/h3&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp;디스크 매니저의 가장 큰 역할은 파일생성과 확장을 위해 섹터들을 제공해주는 것이다. 이를 위해 각 볼륨은 파일들에&nbsp;할당해줄 섹터들과 이를 관리하기 위한 메타(meta)데이터로 이루어져 있다. 메타데이터들이 저장된 페이지를 볼륨의 &lt;strong&gt;시스템 페이지(System Page)&lt;/strong&gt;라고 하며, 볼륨에 대한 정보와 각 섹터들의 예약 여부를 담고 있다. 시스템 페이지는 다음과 같이 두가지로 &nbsp;분류할 수 있다.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;볼륨 헤더 페이지&lt;/strong&gt; &lt;strong&gt;(Volume Header Page, 이하 헤더 페이지)&lt;/strong&gt;: 페이지 크기, 볼륨 내 섹터의 전체/최대 섹터, 볼륨 이름 등, 볼륨에 대한 정보를 지니고 있는 페이지&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;섹터 테이블 페이지&lt;/strong&gt; &lt;strong&gt;(Sector Table Page, 이하 STAB 페이지)&lt;/strong&gt;: 볼륨 내의 각 섹터의 예약여부를 비트맵으로 들고 있는 페이지&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이러한 시스템페이지들은 볼륨이 생성될 때 미리 볼륨 내의 정해진 공간에 쓰이고, 이 페이지들이 포함된 섹터를 제외한 나머지 섹터들이 파일 매니저로부터의 섹터 예약요청을 처리하기 위해 사용된다. 볼륨 헤더는 볼륨의 첫 번째 페이지에 할당되고, STAB 페이지는 헤더 페이지의 바로 다음 페이지부터 볼륨의 크기를 모두 커버할 수 있는 만큼의 양이&nbsp;연속적으로 할당된다(&lt;em&gt;disk_stab_init()&lt;/em&gt;). 이를 도식화하면 다음과 같다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://cubrid.com/files/attach/images/7900/267/841/003/9121f0f393912ebda02f9fbc91b9a3b4.png&quot; alt=&quot;volume_format.png&quot; width=&quot;600&quot; height=&quot;134&quot; style=&quot;width: 600px; height: 134px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;첫 섹터가 시스템 페이지들을 위해 할당된&nbsp;모습을 볼 수 있다. 시스템 페이지들의 수가 한 섹터를 못 채울 경우 그림처럼 시스템페이지들을 위해 할당된 섹터 내의 페이지들이 일부 사용되지 않을 수 있고, 볼륨에 크기가 커지면 이에 따라 시스템페이지들을 위한 섹터가 둘 이상 할당될 수도 있다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3 id=&quot;-volume-header-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨 헤더 (Volume Header)&lt;/span&gt;&lt;/h3&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨 헤더(&lt;em&gt;DISK_VOLUME_HEADER&lt;/em&gt;)는 볼륨의 첫 번째 페이지에 쓰이며, 기본적으로 볼륨에 대한 정보들이 고정 크기로 들어가고 나머지 공간에는 가변길이 변수들이 들어간다. 볼륨 헤더가 담고 있는 정보는 크게 5가지 정도로 분류할 수 있다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 볼륨 정보&lt;/em&gt;&lt;/strong&gt;: 볼륨 자체에 대한 정보로 볼륨 전체에 공통으로 적용되는 정보이다. 볼륨의 타입, 캐릭터 셋(set), 생성 시간, 섹터당 페이지 수, 페이지의 크기 등이 저장된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 섹터 정보&lt;/em&gt;&lt;/strong&gt;: 볼륨의 현재 섹터의 정보이다. 볼륨 내에 몇 개의 섹터가 있는지, 얼마나 확장될 수 있는지 등이 저장된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 시스템페이지 정보&lt;/em&gt;&lt;/strong&gt;: 앞서 이야기한 시스템페이지에 대한 정보들이 저장된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 체크포인트 정보&lt;/em&gt;&lt;/strong&gt;: 마지막으로 체크포인트가 성공 시 체크포인트의 시작 지점의 로그 레코드 LSA 정보가 저장된다. 이는 리커버리과정에서 사용된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 가변길이 변수&lt;/em&gt;&lt;/strong&gt;: 볼륨 헤더 페이지 내에서 볼륨 헤더의 모든 고정변수를&nbsp;제외한 나머지 공간은 가변길이 변수들을 위한 공간이다. 볼륨의 full path나 사용자 정의 comment 등이 저장된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;&lt;em&gt;- 기타&lt;/em&gt;&lt;/strong&gt;: reserved 등 동작과 무관한 특수목적 변수들이 저장된다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;구체적으로 볼륨 헤더 구조체(&lt;em&gt;DISK_VOLUME_HEADER&lt;/em&gt;)가 담고 있는 정보(변수)들은 다음과 같다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;td{
    word-wrap:break-word
}
&lt;/style&gt;
&lt;/span&gt;&lt;/p&gt;

&lt;table border=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;분류&lt;/span&gt;&lt;/th&gt;
			&lt;th&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;변수 타입&lt;/span&gt;&lt;/th&gt;
			&lt;th&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;변수명&lt;/span&gt;&lt;/th&gt;
			&lt;th&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;설명&lt;/span&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan=&quot;9&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT8&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;db_charset&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;데이터베이스의 캐릭터 셋&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;volid&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;해당 볼륨의 볼륨 식별자&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DB_VOLTYPE&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;type&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨의 타입, 볼륨이 어떻게 관리될지를 결정&lt;br /&gt;
			Permanent: 영구적으로 볼륨유지&lt;br /&gt;
			Temporary: 서버 종료/재시작시 제거. 임시데이터를 저장하는데 기존 볼륨의 공간이 부족할 경우 생성된다.&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DB_VOLPURPOSE&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;purpose&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨의 이용목적, 볼륨을 어떻게 사용할지를 결정&lt;br /&gt;
			Permanent: 영구적인 데이터를 저장할 것.&lt;br /&gt;
			Temporary: 임시적인 데이터를 저장할 것. 임시데이터를 저장할 때에 임시타입의 볼륨을 만들기전에 임시목적의 영구타입볼륨이 있을 경우 먼저 사용한다.&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT64&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;db_creation&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;데이터베이스 생성시간&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;next_volid&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;여러 볼륨이 있을 경우 그들을 연결하는 포인터, 다음 볼륨의 식별자를 담음&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DKNPAGES&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;sect_npgs&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;한 섹터당 페이지 수&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;iopagesize&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;한 페이지의 크기&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;HFID&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;boot_hfid&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨 부팅과 멀티 볼륨관련된 정보를 담고있는 힙(Heap)파일의 식별자&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan=&quot;3&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DKNPAGES&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;nsect_total&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨의 현재 총 섹터 수, 볼륨파일의 크기를 결정&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DKNPAGES&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;nsect_max&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨이 확장될 수 있는 최대 크기의 섹터 수&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;SECTID&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;hint_allocsect&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터예약시 섹터테이블의 어디부터 탐색할지 캐싱해둔 값&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan=&quot;3&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;시스템 페이지&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DKNPAGES&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;stab_npages&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터테이블이 차지하는 페이지 수&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;PAGEID&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;stab_first_page&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터테이블의 시작페이지&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;PAGEID&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;sys_lastpage&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;마지막 시스템 페이지 (현재 stab_first_page+stab_npages -1)&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;체크포인트&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;LOG_LSA&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;chkpt_lsa&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;체크포인트 시작점의 LSA, 리커버리분석의 시작점 (ARIES의 master record)&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan=&quot;4&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;가변길이 변수&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;char [1]&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;var_fields&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;가변길이 변수들의 시작점, var_fileds + offset&lt;em&gt;to&lt;/em&gt;* 가 각 가변변수의 위치&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;offset_to_vol_fullname&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨의 절대경로 이름의 offset&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;offset_to_next_vol_fullname&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;next_volid 볼륨의 절대경로 이름의 offset&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT16&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;offset_to_vol_remarks&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨에 대한 코멘트의 offset&lt;br /&gt;
			코멘트는 볼륨포맷(&lt;i&gt;disk_format()&lt;/i&gt;)시에 적히는 것으로 유저가 addvoldb를 실행하면서 적는 코멘트나 볼륨의 공간이 가득차 자동으로 새로운 볼륨을 만들어질 경우 적히는 코멘트(&quot;Automatic Volume Extension&quot;) 등이 들어간다.&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan=&quot;3&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;기타&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT32&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;reserved0/1/2/3&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;미래 확장성을 위한 예약변수들&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;INT8/32&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;dummy1/2&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;alignment를 위한 더미변수들&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;char []&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;magic&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;볼륨파일의 매직넘버&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:11px;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;* 각 변수에&nbsp;대한 설명을 달아두었긴 했지만, 명확한 이해를 위해서는 각 변수의 값이 언제 설정되고, 어떻게 사용되는지 등을 알아야 한다. 이에 대한 자세한 내용은 각 변수가&nbsp;이용되는 부분을 설명할 때&nbsp;다시 살펴보도록 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3 id=&quot;-sector-table-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터 테이블 (Sector Table)&lt;/span&gt;&lt;/h3&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp;섹터 테이블(STAB)은 볼륨 내 모든 섹터들의 사용 여부(예약 여부)를 저장하고 있는 비트맵이다. 섹터 테이블 페이지의 하나의 비트는 하나의 섹터의 예약 여부를 나타낸다. 섹터 테이블은 볼륨 헤더&nbsp;페이지의 바로 다음 페이지(볼륨의 두번째 페이지, &lt;em&gt;stab_first_page&lt;/em&gt;)부터 시작하여 볼륨의 최대 크기(&lt;em&gt;nsect_max&lt;/em&gt;)를 커버할 수 있는 만큼의 페이지(&lt;em&gt;stab_npages&lt;/em&gt;)를 사용한다.&nbsp;섹터예약에 관한 연산을 수행할 때, 각 비트를&nbsp;하나씩 순회하며 연산을 수행할 수도 있지만 큐브리드는 비트들을 &lt;strong&gt;&lt;em&gt;DISK_STAB_UNIT&lt;/em&gt; (이하 unit, 유닛)&lt;/strong&gt;이라는 단위로 묶어 관리, 연산하고 불가피할 경우에만 비트를 순회한다. 비트연산을 할 때에 CPU 아키텍쳐등을 고려하여 효율적인 방법으로 처리 할 수 있도록 이러한 처리단위를 제공한다. 정리하자면 섹터 테이블의 비트맵은 여러페이지로 구성되며 각 페이지는 다시 유닛으로 나뉘고, 유닛의 비트들은 각각의 하나의 섹터의 예약&nbsp;여부를 나타낸다. 섹터 테이블을 읽거나 조작하는 등의 연산은 모두 이 유닛을 기반으로 이루어진다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:11px;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;* 현재 유닛은 다음과 같이 UINT64형이다. CPU아키텍처나 디자인에 맞춰 이 값을 변경시키면 STAB의 관리 단위를 변경 시킬 수 있다. 주석 또한 이 값의 변경을 통해 유닛단위를 쉽게 변경할 수 있을 것이라 이야기하고 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;만약 sector_id가 32100인 섹터에 대한 예약여부를 확인하려할 때, STAB에서 해당 비트의 위치는 어떻게 구할 수 있을까? 이는 마치 초에서 (시,분,초)를 구하듯 (page_id, offset_to_unit, offset_to_bit) 으로 다음과 같이 계산된다.&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;code&gt;&lt;span class=&quot;hljs-symbol&quot;&gt;page_id:&lt;/span&gt; (볼륨헤더의 stab_first_page) + sector_id / (페이지의 비트 수)
&lt;span class=&quot;hljs-symbol&quot;&gt;offset_to_unit:&lt;/span&gt; sector_id % (페이지의 비트 수) / (페이지내 유닛의 수)
&lt;span class=&quot;hljs-symbol&quot;&gt;offset_to_bit:&lt;/span&gt; sector_id % (페이지의 비트 수) % (페이지내 유닛의 수)
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;만약 1KB 페이지, 64bit unit이라면 sector_id 32100인 (3, 117, 36)이 된다.&nbsp;안타깝게도 페이지의 크기가 2^n형태가 아니기 때문에 OS의 페이지 테이블이나 CPU 캐시처럼 단순 비트 쉬프트연산으로 유닛과 오프셋등을 구할 수 없다. 때문에 비싼 /, % 연산이 사용된다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:11px;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;* IO 페이지의 크기는 4KB, 16KB 등 2^n형태이더라도 모든 페이지가 공통적으로 페이지타입, LOG_LSA 등의 공간을 이미 예약해두었기 때문에 실제 사용가능한 크기는 이 영역을 제외한 크기이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&nbsp;&lt;/h4&gt;

&lt;h4 id=&quot;-&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;섹터 테이블의 연산&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp;섹터의 예약정보를 조회하거나 예약하려면 섹터테이블의 비트맵을 조작해야한다. 이러한 연산들은 앞서 말한 유닛 단위를 기반으로 이루어지며, 하나의 섹터 비트나 유닛을 참조할 일 보다는 여러 유닛들을 참조하는 경우가 대부분이기 때문에 &lt;strong&gt;커서(Cursor, &lt;em&gt;DISK_STAB_CURSOR&lt;/em&gt;)&lt;/strong&gt;와 이터레이션 인터페이스(&lt;em&gt;disk_stab_iterate_units()&lt;/em&gt;)를 제공한다. 커서는 볼륨 내 한 섹터의 STAB에서의 위치(page_id, offset_to_unit, offset_to_bit)를 가리킨다. 또, 커서가 가리키는 유닛에 대한 연산을 위해 커서가 가리키고 있는 유닛의 포인터(page, unit)를 들고 있다.&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;code class=&quot;lang-c&quot;&gt;typedef &lt;span class=&quot;hljs-class&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;disk_stab_cursor&lt;/span&gt;&lt;/span&gt; DISK_STAB_CURSOR;                 
&lt;span class=&quot;hljs-class&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;disk_stab_cursor&lt;/span&gt;&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;const&lt;/span&gt; DISK_VOLUME_HEADER *volheader;    &lt;span class=&quot;hljs-comment&quot;&gt;/* Volume header */&lt;/span&gt;

    PAGEID pageid;      &lt;span class=&quot;hljs-comment&quot;&gt;/* Current page ID */&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; offset_to_unit;     &lt;span class=&quot;hljs-comment&quot;&gt;/* Offset to current unit in page. */&lt;/span&gt;
    &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; offset_to_bit;      &lt;span class=&quot;hljs-comment&quot;&gt;/* Offset to current bit in unit. */&lt;/span&gt;

    SECTID sectid;      &lt;span class=&quot;hljs-comment&quot;&gt;/* Sector ID */&lt;/span&gt;     

        &lt;span class=&quot;hljs-comment&quot;&gt;// 위의 변수들은 모두 현재 커서가 가리키는 섹터에 대한 정보와 STAB내에서 섹터의 위치&lt;/span&gt;
        &lt;span class=&quot;hljs-comment&quot;&gt;// 아래의 변수들은 위의 변수들이 가리키는 STAB내의 유닛을 참조하기 위한 포인터&lt;/span&gt;

    PAGE_PTR page;      &lt;span class=&quot;hljs-comment&quot;&gt;/* Fixed table page. */&lt;/span&gt;                   
    DISK_STAB_UNIT *unit;       &lt;span class=&quot;hljs-comment&quot;&gt;/* Unit pointer in current page. */&lt;/span&gt;
};
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이터레이션 함수인 &lt;em&gt;disk_stab_iterate_units()&lt;/em&gt; 의 선언부는 다음과 같다. (설명에 필요하지 않은 인자들은 제외하였다.)&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;code class=&quot;lang-c&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; disk_stab_iterate_units (..., DISK_STAB_CURSOR * start, DISK_STAB_CURSOR * &lt;span class=&quot;hljs-built_in&quot;&gt;end&lt;/span&gt;, DISK_STAB_UNIT_FUNC f_unit, &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; *f_unit_args)
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;앞서 이야기한 커서 자료형의 &lt;em&gt;start, end&lt;/em&gt;와 이터레이션하면서 유닛에 적용할 함수(&lt;em&gt;DISK_STAB_UNIT_FUNC&lt;/em&gt;)와 함수의 인자를 매개변수로 받는 것을 볼 수있다. 이 함수는 [&lt;em&gt;start, end&lt;/em&gt;) 범위의 유닛을 순회하면서 각 유닛마다 &lt;em&gt;DISK_STAB_UNIT_FUNC&lt;/em&gt;함수를 적용 시킨다. 여타 프로그래밍언어에 있는 map() 함수를 생각하면 이해가 쉽다. &lt;em&gt;start, end&lt;/em&gt; 커서는 &lt;em&gt;disk_stab_cursor_set&lt;em&gt;at&lt;/em&gt;\&lt;/em&gt;())&lt;em&gt; 류의 함수를 통해 STAB의 시작이나 끝, 특정 sector ID로 설정된다. &lt;/em&gt;DISK_STAB_UNIT_FUNC* 는 함수포인터로 다음과 같다.&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;code class=&quot;lang-c&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; (*DISK_STAB_UNIT_FUNC) (..., DISK_STAB_CURSOR * &lt;span class=&quot;hljs-built_in&quot;&gt;cursor&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;bool&lt;/span&gt; * &lt;span class=&quot;hljs-built_in&quot;&gt;stop&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; *args);
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;em&gt;disk_stab_iterate_units()&lt;/em&gt;에서 이터레이션되어 만나는 각 유닛에 대한 커서를 인자로 받아 사용자가 정의한 작업을 진행한다. 이 때 &lt;em&gt;stop&lt;/em&gt;에 true를 넣고 함수를 종료하면, &lt;em&gt;disk_stab_iterate_units()&lt;/em&gt; 의 이터레이션이 종료된다. 예를 들어 30개의 섹터를 예약하려 할 때, 이번 유닛에서 30개의 섹터 예약을 모두 완료했다면 더 이상의 작업을 중지하는 종료 조건으로 활용할 수 있다. 이러한 유닛 이터레이션을 통한 연산에는 섹터들 예약, 섹터들 예약 해제, 가용 섹터들의 갯수 확인 등이 있다. 좀 더 확실한 이해를 위해 가용 섹터들의 갯수확인에 사용되는 &lt;em&gt;DISK_STAB_UNIT_FUNC&lt;/em&gt; 는 &lt;em&gt;disk_stab_count_free()&lt;/em&gt; 와 이에 대한 호출부를 살펴보자.&lt;/span&gt;&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;code class=&quot;lang-c&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;// free sector의 갯수를 구하는 함수 정의&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; disk_stab_count_free (THREAD_ENTRY * thread_p, DISK_STAB_CURSOR * &lt;span class=&quot;hljs-built_in&quot;&gt;cursor&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;bool&lt;/span&gt; * &lt;span class=&quot;hljs-built_in&quot;&gt;stop&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; *args)
{   
    DKNSECTS *nfreep = (DKNSECTS *) args;

    &lt;span class=&quot;hljs-comment&quot;&gt;/* add zero bit count to free sectors total count */&lt;/span&gt;
    *nfreep += bit64_count_zeros (*&lt;span class=&quot;hljs-built_in&quot;&gt;cursor&lt;/span&gt;-&gt;unit);
    &lt;span class=&quot;hljs-built_in&quot;&gt;return&lt;/span&gt; NO_ERROR;
}

&lt;span class=&quot;hljs-comment&quot;&gt;// 함수 호출부&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; disk_rv_volhead_extend_redo (THREAD_ENTRY * thread_p, LOG_RCV * rcv)
{
      ...
      disk_stab_cursor_set_at_sectid (volheader, volheader-&gt;nsect_total - nsect_extend, &amp;start_cursor); 
      disk_stab_cursor_set_at_end (volheader, &amp;end_cursor);
        error_code = disk_stab_iterate_units (thread_p, volheader, PGBUF_LATCH_READ, &amp;start_cursor, &amp;end_cursor, disk_stab_count_free, &amp;nfree);
      ...
    disk_cache_update_vol_free (volheader-&gt;volid, nfree);
      ...
}
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;호출부의 예는 recovery의 redo phase에 사용되는 함수중 하나인 &lt;em&gt;disk_rv_volhead_extend_redo()&lt;/em&gt; 로, 실제로 확장된 볼륨 내의 free setor의 갯수를 디스크 캐시에 업데이트하기 위한 코드이다. 확장하기 전의 위치(&lt;em&gt;volheader-&gt;nsect_total - nsect_extend&lt;/em&gt;)에 &lt;em&gt;start&lt;/em&gt;커서를 두고, stab의 끝에 &lt;em&gt;end&lt;/em&gt;커서를를 두고 &lt;em&gt;disk_stab_iterate_units()&lt;/em&gt;함수를 호출하여 [&lt;em&gt;start, end&lt;/em&gt;)를 순회하며 모든 유닛들에서 0인 비트들의 갯수를 구하는 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;&lt;span style=&quot;font-size:11px;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;* 이러한 이터레이션 방식은 파일매니저와 디스크매니저의 여러 곳에서 사용된다. 대표적으로 나중에 살펴볼 파일 매니저의 파일 테이블과 유저 테이블 등에서도 이러한 패턴으로 데이터를 접근, 조작한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이어서 다룰 디스크 매니저 내용은 다음과 같다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;- 섹터 예약 및 예약 해제&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;- 볼륨 확장&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Thu, 30 Mar 2023 11:05:03 +0900</pubDate>
						<category><![CDATA[CUBRID]]></category>
						<category><![CDATA[CUBIRD Internal]]></category>
						<category><![CDATA[Source]]></category>
						<category><![CDATA[Code]]></category>
						<category><![CDATA[Disk]]></category>
						<category><![CDATA[Disk Manger]]></category>
						<category><![CDATA[Storage]]></category>
								</item>
				<item>
			<title><![CDATA[JPA와 CUBRID 연동 가이드]]></title>
			<dc:creator><![CDATA[김동민]]></dc:creator>
			<link>https://www.cubrid.com/blog/3840898</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3840898</guid>
						<comments>https://www.cubrid.com/blog/3840898#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;JPA?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;JPA는 자바의 ORM 기술 표준으로 인터페이스의 모음입니다.&lt;br /&gt;
표준 명세를 구현한 구현체들(Hibernate, EclipseLink, DataNucleus)이 있고, JPA 표준에 맞춰 만들면 사용자는 언제든 원하는 구현체를 변경하며 ORM 기술을 사용할 수 있습니다.&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/949c9c9eafb025fac5086d2e84c9d886.jpg&quot; alt=&quot;jpa_interface.jpg&quot; style=&quot;height: 255px; width: 700px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;이번 CUBRID 연동 가이드에서는 대표적으로 많이 사용하는 Hibernate를 사용하여 작성했습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;버전 정보&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;SpringBoot: 2.7.8&lt;/p&gt;

&lt;p&gt;Hibernate: 5.6.14.Final&lt;/p&gt;

&lt;p&gt;Java: 11&lt;br /&gt;
CUBRID: 11.0.10, 11.2.2&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;JPA와 CUBRID 연동&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;1) 라이브러리 설정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Maven 프로젝트에 JPA(Hibernate), CUBRID JDBC 라이브러리를 넣기 위해 pom.xml에 설정을 합니다.&lt;/p&gt;

&lt;p&gt;CUBRID JDBC를 받기 위해 repository도 같이 추가해야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/dc99b51dd6d3430e0e840b6727b8a858.png&quot; alt=&quot;pom_xml.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;2) JPA 설정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;필요한 라이브러리를 다 받은 뒤 JPA 설정 파일인 persistence.xml에 설정을 해줘야 합니다. 해당 파일은 표준 위치가 정해져 있기 때문에&nbsp;/resources/META-INF/ 밑에 위치해야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/2ba0f0b960bbe216aa45ac1b1c24af11.png&quot; alt=&quot;persistence_repository.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;DBMS 연결 시 필요한 정보와 JPA 옵션들을 설정해 줍니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/a6ddaf1f990650492941e44e73f8688b.png&quot; alt=&quot;persistence_xml.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;기본적으로 driver, url, user, password를 설정하고, 방언(dialect)도 필수적으로 설정해야 합니다.&lt;/p&gt;

&lt;p&gt;DBMS가 제공하는 SQL 문법과 함수들이 조금씩 다르기 때문에 JPA가 어떤 DBMS의 방언(dialect)를 사용해야 할지 알아야 하기 때문입니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;추가적으로 필수 설정은 아니지만, SQL 출력과 관련된 옵션들을 추가했습니다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;- show_sql: Hibernate가 만든 모든 SQL을 콘솔에 보여준다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;- format_sql: 로그와 콘솔에 SQL을 보기 편하게 포맷해서 보여준다.&lt;/p&gt;

&lt;p style=&quot;margin-left: 40px;&quot;&gt;- use_sql_comments: SQL 내부에 주석을 생성하여 보여준다.&lt;/p&gt;

&lt;p&gt;그 외 옵션들은 &lt;a href=&quot;https://docs.jboss.org/hibernate/orm/5.6/userguide/html_single/Hibernate_User_Guide.html#configurations-logging&quot;&gt;hibernate user guide&lt;/a&gt;를 통해 확인할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;3) 테이블 스키마&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;demodb의 olympic 테이블을 사용합니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;=== &lt;Help: Schema of a Class&gt; ===&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;Class Name&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; olympic&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;Attributes&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; host_year&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER NOT NULL&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; host_nation&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER VARYING(40) NOT NULL&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; host_city&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER VARYING(20) NOT NULL&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; opening_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;DATE NOT NULL&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; closing_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATE NOT NULL&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; mascot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER VARYING(20)&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; slogan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER VARYING(40)&lt;/p&gt;

			&lt;p&gt;&nbsp;&nbsp;&nbsp;&nbsp; introduction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER VARYING(1500)&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;Constraints&gt;&lt;/p&gt;
			&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY pk_olympic_host_year ON olympic (host_year)&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;4) 엔티티 클래스&nbsp;생성&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;olympic 테이블의 컬럼들과 동일하게 olympic 엔티티 클래스를 하나 생성합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/dd2366ae27fda8e84567872bb617b3d2.png&quot; alt=&quot;olympic_entity.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;5) 데이터 입력, 조회 테스트&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;간단한 코드를 통해 생성되는 SQL을 확인해 보겠습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;Insert code&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/25c854b9d04ae526e3e41f18b667c900.png&quot; alt=&quot;jpa_insert_code.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Insert SQL&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/027de89ae014400a4b7eebc5fc5c6938.png&quot; alt=&quot;jpa_insert_sql.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;Select code&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/afae36ef74a62fce721cc0d33899489d.png&quot; alt=&quot;jpa_select_code.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Select SQL&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/b96b25088add462f6087f59626a7018f.png&quot; alt=&quot;jpa_select_sql.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Select result&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/61d281372fbf7fd629cdf62fb3df7c0b.png&quot; alt=&quot;jpa_select_result.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;CUBRID 11.2 버전 이상을 사용하는 경우&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;CUBRID 11.2 버전부터 user schema가 추가 되었습니다. (&lt;a href=&quot;https://www.cubrid.com/index.php?mid=release_note&amp;page=2&amp;document_srl=3836617&quot;&gt;CUBRID11.2 릴리즈&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;11.2 버전 이상을 사용하는 경우 추가로 JPA 설정을 2가지 더 해야합니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;1) 테이블명 어노테이션 설정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;엔티티에 유저 스키마 + &quot;.&quot; + 테이블명으로 설정&lt;/p&gt;

&lt;p&gt;@Table(name=&quot;[schema_name].[table_name]&quot;)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/a7be37d8be3c9a41560a1e042704e81c.png&quot; alt=&quot;olympic_entity_11_2.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;2) persistence.xml에 설정 추가&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;테이블명의 &quot;.&quot;을 Hibernate가 자동으로 &quot;_&quot;로 변환시키기 때문에 &quot;.&quot;을 그대로 사용하기 위해 파라미터 설정&lt;/p&gt;

&lt;p&gt;&lt;property property name=&quot;hibernate.naming.physical-strategy&quot; value=&quot;org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/5f8b5b880dd9b1a41d0da575d1df674c.jpg&quot; alt=&quot;persistence_11_2_xml_localhost_red_box.jpg&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:24px;&quot;&gt;&lt;strong&gt;SpringBoot, JPA 와 CUBRID 연동&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;SpringBoot를 이용하면 더 간단하게 JPA와 CUBRID를 연동할 수 있습니다.&lt;/p&gt;

&lt;p&gt;이번에는&nbsp;gradle과 yml로 CUBRID 11.2 버전으로 설정해 보겠습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;build.gradle&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/15e702e158b564ca6f480da609347396.png&quot; alt=&quot;build_gradle.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;application.yml&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/fac6179d2abe596c9084fdc3ca523fde.png&quot; alt=&quot;application_yml.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;olympic 엔티티&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/97928c8459c09c669dd69f85632d2abc.png&quot; alt=&quot;spring_olympic_entity.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;repository 생성&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;JpaRepository를 상속 받은 OlympicRepository 인터페이스를 만듭니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/d2fd27654eafffb576a8b5eea947deb5.png&quot; alt=&quot;spring_repository.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;strong&gt;데이터 조회 테스트&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/898/840/003/d99755e8f2ee962f6ece3608a0bf679c.png&quot; alt=&quot;spring_select_result.png&quot; style=&quot;height: 446px; width: 600px;&quot; /&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Wed, 22 Feb 2023 16:21:31 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[dblink를 이용한 remote-server materialized view 기능]]></title>
			<dc:creator><![CDATA[bwkim]]></dc:creator>
			<link>https://www.cubrid.com/blog/3840824</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3840824</guid>
						<comments>https://www.cubrid.com/blog/3840824#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;Materialized View&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size:14px;&quot;&gt;Materialized View(이하 MView) 이것은 말 그대로 View의 일종으로 일반 View는 논리적인 스키마인데 반해, MView는 물리적 스키마입니다. 논리적 스키마는 실제 데이터가 데이터베이스에 저장되어 있지 않고 데이터를 가져오기 위한 SQL질의만 저장되어 있다라는 것이고, 물리적 스키마 혹은 테이블이라는 것은 셀제 데이터가 데이터베이스에 저장되어 있다라는 것입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;span style=&quot;font-size:14px;&quot;&gt;MView는 필요한 결과를 가져오는 질의가 빈번하게 자주 사용 될 경우, 질의 실행 시간 속도 향상을 위해 데이터베이스 테이블을 만들어 저장해 두는 것으로 실행 비용이 많이 드는 조인이나, Aggregate Function을 미리 처리하여 필요할 때 테이블을 조회 하도록 하는 것 입니다. &lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;예를 들면 대용량의 데이터를 COUNT, SUM, MIN, MAX, AVG 처럼 자주 사용되는 Aggregate Function 실행 속도를 향상을 위해서, 질의 실행 결과을 데이터베이스 테이블로 생성해 두는 벙법입니다. 즉, 자주사용되는 View의 결과를 데이터베이스에 저장해서 질의 실행 속도를 향상시키는 개념입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;이번 글에서는&nbsp;일반적인 MView와 더불어 현재 작업 중인 데이터베이스 로컬 서버가 아닌 원격지(remote) 데이터베이스 서버의 테이블을 로컬 서버로 연결하는 것에 대한 내용으로, 일반적인 MView의 필요성에 더해 원격지 데이터를 가져오기 위한 효율성까지도 고려한 것으로 CUBRID에서는 아직 지원하지 않는 MView를 우회적으로 적용할 수 있는 팁이라고 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;MView의 특징&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;MView를 만들어 둠으로써 질의 실행 시간을 줄일 수 있습니다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;응용프로그램에서 MVie&lt;/span&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;w 사용 시 DBA는 응용에 영향을 주지 않고 생성하거나 수정/제거할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;MView는 대신 질의 실행 결과가 모두 저장되기 때문에, MView에 해당하는 테이블 만틈 공간을 차지하게 됩니다.&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;특히, 원격지 테이블의 경우 로컬 테이블에서 데이터를 가져오는 것보다 수 배의 시간이 소요될 수 있는데, 이를 로컬에 MView 테이블로 유지함으로써 성능을 최대한으로 끌어올릴 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;Oracle과 MView&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;MView 또는 스냅샷이라고 하며, 로컬 또는 원격 테이블에 대한 질의를 기반으로 내용이 주기적으로 새로 고쳐지는 테이블 세그먼트입니다. &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/824/840/003/09fb687368b74a9305d050627c03145b.png&quot; alt=&quot;materialized-view.png&quot; style=&quot;margin-right: 50px; margin-left: 50px; height: 447px; width: 800px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;기본 문법은 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:500px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;background-color: rgb(221, 221, 221);&quot;&gt;
			&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-family:times new roman,times,serif;&quot;&gt;&nbsp; &nbsp; &nbsp;-- Normal&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
			&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&nbsp; CREATE MATERIALIZED VIEW view-name&lt;br /&gt;
			&nbsp; BUILD [IMMEDIATE | DEFERRED]&lt;br /&gt;
			&nbsp; REFRESH [FAST | COMPLETE | FORCE ]&lt;br /&gt;
			&nbsp; ON [COMMIT | DEMAND ]&lt;br /&gt;
			&nbsp; [[ENABLE | DISABLE] QUERY REWRITE]&lt;br /&gt;
			&nbsp; AS&lt;br /&gt;
			&nbsp; SELECT ...;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-family:times new roman,times,serif;&quot;&gt;&nbsp; &nbsp; &nbsp;-- Pre-Built&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
			&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&nbsp; CREATE MATERIALIZED VIEW view-name&lt;br /&gt;
			&nbsp; ON PREBUILT TABLE&lt;br /&gt;
			&nbsp; REFRESH [FAST | COMPLETE | FORCE ]&lt;br /&gt;
			&nbsp; ON [COMMIT | DEMAND ]&lt;br /&gt;
			&nbsp; [[ENABLE | DISABLE] QUERY REWRITE]&lt;br /&gt;
			&nbsp; AS&lt;br /&gt;
			&nbsp; SELECT ...;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;문법을 잘 보면 MView가 어떻게 생성되고, 어떻게 동기화를 하는지에 대해 알 수 있습니다. 좀더 자세한 내용은 오라클 메뉴얼을 참조하시기 바랍니다. 동기화는 REFRESH와 ON절을 통해 연결된 테이블이 COMMIT될 때 혹은 요청이 올 때마다로 각각 동작이 됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:16px;&quot;&gt;&lt;strong&gt;CUBRID와 MView&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;CUBRID는 아직 MView를 지원하지 않습니다. 그래서 MView와 유사한 효과를 만들기 위해서는 TRIGGER를 사용할 수 있습니다. 예를 들면 아래와 같이 update_logs라는 테이블에 데이터를 INSERT하는 것입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:800px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;background-color: rgb(221, 221, 221);&quot;&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&nbsp;&nbsp;CREATE TABLE update_logs(event_code INTEGER, score VARCHAR(10), dt DATETIME);&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&nbsp;&nbsp;CREATE TRIGGER example&lt;br /&gt;
			&nbsp;&nbsp;BEFORE UPDATE ON history(score)&lt;br /&gt;
			&nbsp;&nbsp;EXECUTE INSERT INTO update_logs VALUES (obj.event_code, obj.score, SYSDATETIME);&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;로컬 서버의 데이터만 대상으로 하는 MView는 위와 같이 TRIGGER를 정의해서 테이블에 데이터를 INSERT하거나 UPDATE/DELETE할 수 있는데, 원격지 서버의 경우엔 아래와 같이 dblink를 활용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/824/840/003/05ea2a178b7bb411004c4268e76f6965.png&quot; alt=&quot;cubrid_mview.png&quot; style=&quot;margin-left: 50px; margin-right: 50px; height: 338px; width: 800px;&quot; /&gt;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:800px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td style=&quot;background-color: rgb(221, 221, 221);&quot;&gt;
			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-size: 14px; font-family: &quot;courier new&quot;, courier, monospace;&quot;&gt;&nbsp; CREATE TABLE remote_logs(event_code INTEGER, score VARCHAR(10), dt DATETIME);&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp; CREATE SERVER remote_srv1 (&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; HOST=&#39;192.168.2.194&#39;,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; PORT=33000,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; DBNAME=demodb,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; USER=dba,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; PASSWORD=&#39;&#39;&lt;br /&gt;
			&nbsp; );&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp; CREATE TABLE mview_trig(upd datetime);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:courier new,courier,monospace;&quot;&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;&nbsp; CREATE TRIGGER remote_exam&lt;br /&gt;
			&nbsp; BEFORE UPDATE ON mview_trig(upd)&lt;br /&gt;
			&nbsp; EXECUTE INSERT INTO remote_logs&nbsp;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT a, b, c&nbsp;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM dblink(remote_srv1, &#39;SELECT event_code, score, dt FROM history WHERE ...&#39;)&nbsp;&lt;br /&gt;
			&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;t(a INTEGER, b VARCHAR(10), c DATETIME);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size:14px;&quot;&gt;위의 예는 remote_logs라는 일종의 MView 역할을 하는 테이블에 원격지 history 테이블의 데이터를 INSERT하는 과정으로 정리할 수 있습니다. 트리거를 정의할 때, 원격지 테이블에서 가져올 수 있는 질의문은 조인이 포함된 복잡한 질의일 수도 있고, SUM이나 COUNT와 같이 Aggreate Function이 포함될 수도 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Mon, 20 Feb 2023 15:49:11 +0900</pubDate>
						<category><![CDATA[CUBRID]]></category>
						<category><![CDATA[DBLink]]></category>
						<category><![CDATA[MView]]></category>
						<category><![CDATA[Matirialized_View]]></category>
								</item>
				<item>
			<title><![CDATA[DBeaver 환경을 새로운PC에 간편하게 복원하기]]></title>
			<dc:creator><![CDATA[HiCLASS]]></dc:creator>
			<link>https://www.cubrid.com/blog/3839971</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3839971</guid>
						<comments>https://www.cubrid.com/blog/3839971#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/971/839/003/538cc683bc5e7fc1f48f206e7e5bed69.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h5&gt;현재 Java로 구현된 데이터베이스 관리 툴 중에 가장 인기가 있는 툴이 DBeaver가 아닌가 생각된다.&lt;/h5&gt;

&lt;h5&gt;DBeaver 툴은 CUBRID 또한 지원을 해서 SQL Query browser의 기능을 충분히 수행한다.&lt;/h5&gt;

&lt;h5&gt;※ DBeaver 특징&lt;/h5&gt;

&lt;p&gt;□ Community Edition 버전을 사용하면 라이센스(Apache License)가 무료이다.&lt;/p&gt;

&lt;p&gt;□ 자바/이클립스 기반으로 개발되어서 윈도우, 리눅스, MAC에서 구동된다.&lt;/p&gt;

&lt;p&gt;□ JDBC 기반으로 해서 DB를 지원한다. (CUBRID, ORACLE, SQL Server, MySQL, Postgresql ... )&lt;/p&gt;

&lt;p&gt;□ 개발소스가 공개되어서 버그픽스가 가능하고 새로운 기능을 개발하여 사용이 가능하다.&lt;/p&gt;

&lt;p&gt;□ 릴리즈도 거의 2주마다 되기 때문에 버그 픽스또한 매우 빠른 편이다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h5&gt;CURBID를 DBeaver에서 사용하는 방법은 &quot;&lt;u&gt;&lt;a href=&quot;https://www.cubrid.com/3827667&quot;&gt;&lt;span style=&quot;color:#0000FF;&quot;&gt;DBeaver Database Tool 큐브리드 사용하기&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&quot; 를 참조 하면 도움이 될 것이다.&lt;/h5&gt;

&lt;h5&gt;필자는 해당 툴을 사용하다가 사용하는 PC를 바꾸게 되어 기존 설정을 백업해서 복구 하고자 한다.&lt;br /&gt;
Workspace를 따로 빼서 사용하지 않은 기본 설정으로 사용하신 분을 기준으로 백업/복구를 가이드 하고자 한다.&lt;/h5&gt;

&lt;p&gt;&lt;font&gt;순서는 다음과 같다.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;1. 먼저 백업하고자 하는 기존의 환경에서 탐색기 창을 연다.&lt;/p&gt;

&lt;p&gt;&nbsp;2. 주소/디렉터리 위치 표기창에 %appdata% 를 입력한다.&lt;br /&gt;
&nbsp; &nbsp; &nbsp;(C:\Users\사용자명\AppData\Roaming 디렉터리 인지 확인 한다.)&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/971/839/003/318df1bb0193087bd12ae68a37b95223.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;3. DBeaverData 디렉터리를 통채로 백업을 받는다.&lt;/p&gt;

&lt;p&gt;&nbsp;4. 새로운 환경에서 동일하게 %appdata% 로 이동하여 백업 받았던 디렉터리를 복사해 넣는다.&lt;/p&gt;

&lt;p&gt;&nbsp;5. DBeaver를 실행한다.&lt;/p&gt;

&lt;p&gt;&nbsp;6. 환경설정 창으로 이동한다. Drivers location을 새로운 %appdata%(C:\Users\유저명\AppData\Roaming)로 변경한다.&lt;/p&gt;

&lt;p&gt;&nbsp;7. 잘 사용한다.&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Mon, 26 Dec 2022 15:05:24 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID Flashback]]></title>
			<dc:creator><![CDATA[김주호]]></dc:creator>
			<link>https://www.cubrid.com/blog/3838860</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3838860</guid>
						<comments>https://www.cubrid.com/blog/3838860#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h1&gt;Introduction&lt;/h1&gt;

&lt;p&gt;&nbsp; 큐브리드 11.2 버전이 릴리즈되면서&nbsp;Flashback 기능도 함께 소개되었습니다. 아래에서는 큐브리드에서 제공하는 Flashback 에 대한 기능을 이해하기 위한 Background와 흐름, 그리고 사용방법에 대해 소개해드리겠습니다.&lt;/p&gt;

&lt;hr /&gt;
&lt;h1&gt;Background&lt;/h1&gt;

&lt;h3&gt;Supplemental logging&lt;/h3&gt;

&lt;p&gt;&nbsp; 사용자가 트랜잭션을 수행하면 트랜잭션 로그가 기록됩니다. 트랜잭션 로그에는 사용자가 변경하기 전의 데이터 (UNDO)와 사용자가 변경한 후의 데이터 (REDO)가 저장됩니다. Flashback에서는 별도의 전용 데이터 공간을 만들기 보다는 이미 로그 볼륨에 저장된 트랜잭션 로그를 사용합니다. 트랜잭션 로그의 UNDO와 REDO를 이용해 사용자가 수행한 SQL구문을 추측합니다. 하지만 트랜잭션 로그에는 데이터베이스의 물리적인 변경에 대한 데이터만을 가지고 있기 때문에, 논리적인 단위 (SQL 구문)으로 반환해야하는 Flashback을 위해서는 추가적인 데이터가 필요합니다. 추가적인 데이터에는 트랜잭션을 수행한 사용자 정보 등이 있으며, 해당 정보는 Supplemental log를 통해 저장됩니다. 따라서, Flashback을 수행하기 위해서는 &lsquo;supplemental_log&rsquo; 시스템 파라미터를 1 또는 2로 설정해줘야 합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/860/838/003/bbc85b1398ee8837822863926b1ad719.png&quot; alt=&quot;supplemental_log.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;hr /&gt;
&lt;h1&gt;CUBRID Flashback&lt;/h1&gt;

&lt;h3&gt;Overview&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/860/838/003/d1ea45ce2a76d2f3e2be87e81d147141.png&quot; alt=&quot;flashback_flow.png&quot; style=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; 사용자가 실수로 테이블내의 모든 데이터를 삭제하고 commit을 했다고 가정해봅시다. 사용자는 우선 백업된 데이터가 있는지 찾아볼 것이고, 없다면 기억을 더듬어서 하나씩 데이터를 삽입할 것입니다. 이런 경우를 대비해서 큐브리드는 Flashback 기능을 제공하게 되었습니다. Flashback 기능은 아래 5단계를 거쳐 제공되며, 각 단계에 대한 설명은 다음과 같습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h5&gt;1. 요청&lt;/h5&gt;

&lt;p&gt;&nbsp; - 특정 테이블(user.tbl)에 대하여 flashback을 요청합니다.&lt;/p&gt;

&lt;h5&gt;2. 정보 생성&lt;/h5&gt;

&lt;p&gt;&nbsp; - CUB_SERVER는 요청받은 테이블에 가해진 변경사항을 알기 위해 트랜잭션 로그들을 순회합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 로그를 순회하며, 테이블에 수행된 트랜잭션들을 찾고 각 트랜잭션 내에서 몇개의 행이 삽입/갱신/삭제 되었는지 정보를 수집합니다.&lt;/p&gt;

&lt;h5&gt;3. 요약 정보 반환&lt;/h5&gt;

&lt;p&gt;&nbsp; - 테이블에 수행된 트랜잭션 요약 정보를 사용자에게 보여줍니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 요약 정보에는 트랜잭션을 수행한 사용자, 트랜잭션 시작 시간, 트랜잭션 종료&nbsp;시간, 트랜잭션 내에서 삽입/갱신/삭제 된 행의 수 등이 표시됩니다.&lt;/p&gt;

&lt;h5&gt;4. 트랜잭션 식별자 전달&lt;/h5&gt;

&lt;p&gt;&nbsp; &nbsp;- 사용자는 요약 정보를 보고 되돌리고 싶은 트랜잭션을 선택하여 CUB_SERVER에 전달합니다.&lt;/p&gt;

&lt;h5&gt;5. SQL 구문 반환&lt;/h5&gt;

&lt;p&gt;&nbsp; - CUB_SERVER에서는 트랜잭션 로그와 supplemental log를 이용해, 선택된 트랜잭션을 되돌릴 수 있도록 SQL구문을 작성합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 작성된 SQL 구문을 사용자에게 시간 역순으로 반환합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 역순으로 반환된 SQL구문을 수행하면, 해당 트랜잭션을 수행하기 이전으로 데이터를 되돌릴 수 있습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;How to use&lt;/h3&gt;

&lt;h5&gt;1. Supplemental log 설정&lt;/h5&gt;

&lt;p&gt;&nbsp; - $CUBRID/conf/cubrid.conf에 아래와 같이 supplemental_log 시스템 파라미터를 설정합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - supplemental_log 설정 이후에 수행된 트랜잭션에 대해서만 flashback을 수행할 수 있습니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - supplemental_log 의 값은 1 또는 2로 설정하면 되며, 설정 값의 차이 (1 또는 2)는 flashback 기능에는 영향을 끼치지 않습니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:500px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;cubrid.conf&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;...&lt;/p&gt;

			&lt;p&gt;supplemental_log=1 또는 supplemental_log=2&lt;/p&gt;

			&lt;p&gt;...&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h5&gt;2. flashback 수행&lt;/h5&gt;

&lt;p&gt;2.1&nbsp;기본 수행&lt;/p&gt;

&lt;p&gt;데이터베이스 명과 테이블 명을 입력하면 최근 10분동안 해당 테이블에 수행된 트랜잭션에 대한 정보를 보여줍니다. 명령어는 아래와 같이 수행하면 됩니다.&lt;br /&gt;
요약 정보에서 출력되는 컬럼 정보는 메뉴얼&lt;a href=&quot;https://www.cubrid.org/manual/ko/11.2/admin/admin_utils.html#flashback&quot;&gt;&para;&lt;/a&gt;을&nbsp;참고하면 됩니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ echo &quot;supplemental_log=1&quot; &gt;&gt; $CUBRID/conf/cubrid.conf&lt;br /&gt;
			$ cubrid server start demodb&lt;br /&gt;
			$ csql -u dba demodb -c &quot;create table tbl (a int)&quot;&lt;br /&gt;
			$ csql -u dba demodb -c &quot;insert into tbl values (10);&quot;&lt;br /&gt;
			&lt;br /&gt;
			$ cubrid flashback demodb dba.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:17:24 - 25-10-2022:14:18:03&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 14 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:17:49 &nbsp; 25-10-2022:14:17:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 14&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			delete from [dba.tbl] where [a] = 10 limit 1;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.2 필터링 적용&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.2.1 시간 범위&lt;br /&gt;
&nbsp; 트랜잭션 시작 시간 (start-date), 트랜잭션 종료&nbsp;시간 (end-date) 옵션으로 시간 범위를 정할 수 있습니다. 사용자가 되돌리고 싶은 트랜잭션이 어느 시간대에 수행되었는지&nbsp;특정할 수 있는 경우 사용합니다.&nbsp;&lt;br /&gt;
&lt;img src=&quot;https://www.cubrid.com/files/attach/images/7900/860/838/003/09dd6ee1499e3399ce40c08ce8c0705d.png&quot; alt=&quot;시간설정.png&quot; style=&quot;&quot; /&gt;&lt;br /&gt;
&nbsp; 시간 범위 사이에서 commit된 트랜잭션에 대해서만 Flashback 기능을 제공합니다. 위 그림에서는 Transaction 1과 Transaction 2가 Flashback 대상이 될 수 있습니다. 하지만 Transaction 1의 경우에는 start-date 이전에 수행된 DML에 대해서는&nbsp;트랜잭션 로그를 지우지 않을 것이라고&nbsp;보장하지 않기 때문에, Flashback이 불가능할 수도 있습니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.2.1.1.&nbsp;옵션 설정&lt;/p&gt;

&lt;p&gt;&nbsp; ​-&nbsp;트랜잭션 시작 시간 및 종료&nbsp;시간 설정하지 않은 경우 :&nbsp;(현재 - 10분) ~ 현재 사이에 커밋된 트랜잭션들에 대해서 정보를 추출합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 시작 시간만 설정 :&nbsp;(start-date) ~ (start-date + 10분)&nbsp;사이에 커밋된 트랜잭션들에 대해서 정보를 추출합니다.&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 종료&nbsp;시간만 설정&nbsp;: (end-date - 10분) ~ (end-date)&nbsp;사이에 커밋된 트랜잭션들에 대해서 정보를 추출합니다.&nbsp;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 시작 시간 및 종료&nbsp;시간 설정 : (start-date) ~ (end-date) 사이에 커밋된 트랜잭션들에 대해서 정보를 추출합니다.&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.2.1.2. 사용 예시&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 시작 시간 설정 (start-date)&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb dba.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:36:01 - 25-10-2022:14:46:01&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:01 &nbsp; 25-10-2022:14:45:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;dba.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 18 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:36 &nbsp; 25-10-2022:14:45:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// start-date를 트랜잭션 18의 Start time으로 설정&lt;/strong&gt;&lt;br /&gt;
			$ cubrid flashback demodb dba.tbl --start-date 25-10-2022:14:45:36&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:45:36 - 25-10-2022:14:46:22&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 18 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:36 &nbsp; 25-10-2022:14:45:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 종료&nbsp;시간 설정 (end-date)&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb dba.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:36:01 - 25-10-2022:14:46:01&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:01 &nbsp; 25-10-2022:14:45:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;dba.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 18 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:36 &nbsp; 25-10-2022:14:45:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// end-date를&nbsp;트랜잭션 17의 End time으로 설정&lt;/strong&gt;&lt;br /&gt;
			$ cubrid flashback demodb dba.tbl --end-date 25-10-2022:14:45:20&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:35:20 - 25-10-2022:14:45:20&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:01 &nbsp; 25-10-2022:14:45:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; - 트랜잭션 시작 시간 및 종료&nbsp;시간&nbsp;설정 (start-date, end-date)&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb dba.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:36:01 - 25-10-2022:14:46:01&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:01 &nbsp; 25-10-2022:14:45:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;dba.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 18 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:36 &nbsp; 25-10-2022:14:45:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// start-date를 트랜잭션 17의 Start time으로 설정하고,&nbsp;end-date를&nbsp;트랜잭션 18의 End time으로 설정&lt;/strong&gt;&lt;br /&gt;
			$ cubrid flashback demodb dba.tbl --start-date 25-10-2022:14:45:01 --end-date 25-10-2022:14:45:50&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:45:01 - 25-10-2022:14:45:50&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:01 &nbsp; 25-10-2022:14:45:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;dba.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 18 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:45:36 &nbsp; 25-10-2022:14:45:50 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.2.2&nbsp;트랜잭션 사용자 (user)&lt;br /&gt;
&nbsp; 테이블에 변경을 가한 트랜잭션을 누가 수행했는지 특정하고 싶을 경우 사용합니다.&nbsp;&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb public.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:45:55 - 25-10-2022:14:55:55&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 28 &nbsp;PUBLIC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:18 &nbsp; 25-10-2022:14:55:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 31 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:46 &nbsp; 25-10-2022:14:55:47 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// dba 사용자가 수행한 트랜잭션만 추출&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb public.tbl --user dba&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:46:08 - 25-10-2022:14:56:08&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 31 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:46 &nbsp; 25-10-2022:14:55:47 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// public&nbsp;사용자가 수행한 트랜잭션만 추출&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb public.tbl --user public&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:46:12 - 25-10-2022:14:56:12&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;28 &nbsp;PUBLIC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:18 &nbsp; 25-10-2022:14:55:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): -1&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.3 자세한 내용 확인 (detail)&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb public.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:49:30 - 25-10-2022:14:59:30&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 28 &nbsp;PUBLIC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:18 &nbsp; 25-10-2022:14:55:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 31 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;25-10-2022:14:55:46 &nbsp; 25-10-2022:14:55:47 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 31&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;update [public.tbl] set [a] = 10 where [a] = 10 limit 1;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// detail 정보 출력&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb public.tbl --detail&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 2&lt;br /&gt;
			Start date - End date: 25-10-2022:14:49:38 - 25-10-2022:14:59:38&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;28 &nbsp;PUBLIC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:55:18 &nbsp; 25-10-2022:14:55:19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;31 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:14:55:46 &nbsp; 25-10-2022:14:55:47 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp;public.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 31&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;[TRANSACTION ID] 31&lt;br /&gt;
			[USER] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DBA&lt;br /&gt;
			[ORIGINAL] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;update [public.tbl] set [a] = 10 where [a] = 10 limit 1;&lt;br /&gt;
			[FLASHBACK] &nbsp; &nbsp; &nbsp; update [public.tbl] set [a] = 10 where [a] = 10 limit 1;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;2.4 출력 순서 변경 (oldest)&lt;br /&gt;
&nbsp;&nbsp;사용자가&nbsp;해당 SQL구문들을 받아와 바로 적용할 수 있도록,&nbsp;기본적으로 트랜잭션 내에서 수행된 구문들을&nbsp;시간 역순으로 출력해줍니다. 하지만, 시간 순으로 수행된 구문들이 궁금할 경우 oldest 옵션을 사용하면 아래와 같이 시간 순으로 출력됩니다.&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ cubrid flashback demodb dba.tbl&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:53:04 - 25-10-2022:15:03:04&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 40 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:15:02:42 &nbsp; 25-10-2022:15:03:01 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 40&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;insert into [dba.tbl] values (100000000);&lt;br /&gt;
			insert into [dba.tbl] values (100000);&lt;br /&gt;
			insert into [dba.tbl] values (1000);&lt;br /&gt;
			delete from [dba.tbl] where [a] = 100000000 limit 1;&lt;br /&gt;
			delete from [dba.tbl] where [a] = 100000 limit 1;&lt;br /&gt;
			delete from [dba.tbl] where [a] = 1000 limit 1;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// 역순으로 출력&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb dba.tbl --oldest&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:14:53:10 - 25-10-2022:15:03:10&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 40 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:15:02:42 &nbsp; 25-10-2022:15:03:01 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 40&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;delete from [dba.tbl] where [a] = 1000 limit 1;&lt;br /&gt;
			delete from [dba.tbl] where [a] = 100000 limit 1;&lt;br /&gt;
			delete from [dba.tbl] where [a] = 100000000 limit 1;&lt;br /&gt;
			insert into [dba.tbl] values (1000);&lt;br /&gt;
			insert into [dba.tbl] values (100000);&lt;br /&gt;
			insert into [dba.tbl] values (100000000);&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h5&gt;3. 예외 상황&lt;/h5&gt;

&lt;p&gt;3.1 요약 정보를 받고, 트랜잭션 식별자를 선택할 때 일정 시간을 초과한 경우에는 에러를 반환합니다.&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp; &nbsp;cubrid.conf 에서 flashback_timeout 값을 통해 설정할 수 있습니다. 0초 부터 3600초 사이로 설정 가능합니다. 기본값은 300초입니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;$ cubrid flashback demodb dba.tbl -s 25-10-2022:15:02:42&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:15:02:42 - 25-10-2022:15:12:42&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 40 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:15:02:42 &nbsp; 25-10-2022:15:03:01 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): Transaction ID should be entered in 300 seconds. The timeout can be adjusted through the &#39;flashback_timeout&#39; setting in &#39;cubrid.conf&#39;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;3.2&nbsp;시스템 클래스&lt;a href=&quot;https://www.cubrid.org/manual/ko/11.2/sql/catalog.html#catalog&quot;&gt;&para;&lt;/a&gt;에 대해서는 추출할 수 없습니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 700px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;$ cubrid flashback demodb _db_class&lt;br /&gt;
			The system catalog class (_db_class) is not supported in flashback.&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;3.3 owner_name.class_name 형식을 지켜서, Flashback 대상&nbsp;테이블 명을 입력해야합니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 700px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;$ cubrid flashback demodb tbl&lt;br /&gt;
			Invalid format for owner_name.class_name (&#39;tbl&#39;).&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;3.4 현재 DB에 존재하지 않는 테이블에 대해서는 추출할 수 없습니다. (Drop된 테이블)&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width:700px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ csql -u dba demodb -c &quot;drop table&nbsp;tbl2&quot;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// 테이블 DROP 후 flashback 수행&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb dba.tbl2&lt;br /&gt;
			Table (dba.tbl2) does not exist in database&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;3.5&nbsp;로그가 기록된 시점 (과거)의 스키마와 Flashback을 수행하는 시점의 스키마가 다를 경우, 해당 테이블에 대해 flashback할 수 없습니다.&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 1000px;&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;$ csql -u dba demodb -c &quot;alter tbl add column col2 char&quot;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;strong&gt;// 스키마 변경 후 Flashback 수행&lt;/strong&gt;&lt;/p&gt;

			&lt;p&gt;$ cubrid flashback demodb dba.tbl -s 25-10-2022:15:02:42&lt;br /&gt;
			Flashback Summary&lt;br /&gt;
			Number of Transaction: 1&lt;br /&gt;
			Start date - End date: 25-10-2022:15:02:42 - 25-10-2022:15:12:42&lt;br /&gt;
			Transaction id &nbsp;User name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Start time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End time &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Num_insert &nbsp;Num_update &nbsp;Num_delete &nbsp;Table&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 40 &nbsp;DBA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 25-10-2022:15:02:42 &nbsp; 25-10-2022:15:03:01 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 &nbsp;dba.tbl&lt;br /&gt;
			Enter transaction id (press -1 to quit): 40&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;Unable to get flashback because schema (dba.tbl) has been changed.&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Restriction&lt;/h3&gt;

&lt;p&gt;1. CS 모드만 지원합니다.&lt;/p&gt;

&lt;p&gt;2. 동일한 데이터베이스에 대해 동시에 두 개 이상의 Flashback을 수행할 수 없습니다.&lt;/p&gt;

&lt;p&gt;3. DDL은 지원하지 않습니다.&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Tue, 25 Oct 2022 15:40:44 +0900</pubDate>
								</item>
				<item>
			<title><![CDATA[CUBRID to MySQL DBLink]]></title>
			<dc:creator><![CDATA[smnam]]></dc:creator>
			<link>https://www.cubrid.com/blog/3838766</link>
			<guid isPermaLink="true">https://www.cubrid.com/blog/3838766</guid>
						<comments>https://www.cubrid.com/blog/3838766#comment</comments>
									<description><![CDATA[&lt;div class=&quot;xe_content&quot;&gt;&lt;h2&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID DBLink 란&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;데이터베이스에서 정보를 조회하다 보면 종종 외부 데이터베이스의 정보 조회가 필요한 경우가 있습니다. 이렇게 외부 데이터베이스의 정보를 조회하기 위해서 CUBRID DBLink를 이용하면 CUBRID, Oracle, MySQL의 데이터베이스의 정보를 조회할 수 있도록 기능을 제공하며, 타 데이터베이스의 정보를 마치 하나의 데이터베이스에서 조회하는 것과 같은 효과를 발휘합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이 글에서는 CUBRID DBLink와 &lt;strong&gt;MySQL&lt;/strong&gt;의 데이터베이스의 정보를 조회하는 방법을 가이드합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;적용 환경&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;OS 버전 : CentOS Linux 7&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID 버전 : CUBRID 11.2.1&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL 버전 : MySQL 8.0&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL 서버 설정&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;설치되어 있는 MySQL 서버에서 해야하는 설정입니다.&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;1.&nbsp;MySQL SSL 설정&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;SQL 8.0 이상부터 ssl이 기본으로 설정되어 있어 설정을 끄고 실행합니다. 변경 후에는 MySQL을 재시작&nbsp;해야합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;파일 위치: /etc/my.cnf&lt;/span&gt;&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ssl=0&nbsp;&nbsp;&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ssl이 잘 적용이 되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[root@localhost ~]# show variables like &#39;%ssl%&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;+----------+| Variable_name| Value &nbsp; &nbsp;|+-------------------------------------+----------+&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;| have_openssl&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &lt;span style=&quot;color:#FF0000;&quot;&gt;DISABLED &lt;/span&gt;|&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;| have_ssl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &lt;span style=&quot;color:#FF0000;&quot;&gt;DISABLED &lt;/span&gt;|&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2. MySQL 패스워드 설정&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL 8.0부터는 default_authentication_plugin 이 &ldquo;mysql_native_password&rdquo;에서 &ldquo;caching_sha2_password&rdquo;로 변경되었습니다.따라서, 다음과 같은 에러가 발생이 됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ERROR: dblink - [HY000][2061] [unixODBC][MySQL][ODBC 8.0(a) Driver]Authentication plugin &#39;caching_sha2_password&#39; reported error: Authentication requires secure connection...&nbsp;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이를 해결하기 위해선&nbsp; MySQL 패스워드 정책을 변경이 필요한데 아래와 같은&nbsp;3가지 방법이 있습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;my.cnf 파일에 아래 구문을 추가합니다. 그 후 MySQL을 재시작한 뒤 새로운 계정을 생성하게 되면 자동으로 mysql_native_password 정책으로 변경됩니다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;
	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;
				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;...&lt;/span&gt;&lt;/p&gt;

				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;default_authentication_plugin=mysql_native_password&nbsp; &nbsp;&lt;br /&gt;
				...&lt;/span&gt;&lt;/p&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이미 생성된 user를 이용 시에는 아래와 같은 구문 이용해 plugin을 mysql_native_password으로 변경합니다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;
	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ALTER user &#39; test&#39;@&#39;%&#39; IDENTIFIED WITH mysql_native_password BY &#39;Mysql12!&#39;;&nbsp;&nbsp;&lt;/span&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;

	&lt;p&gt;&nbsp;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;새로운 user(test)를 추가하여 사용 시 다음과 같은 구문을 이용해 정책을 명시합니다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;
	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;
				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#구문&lt;br /&gt;
				CREATE USER &#39;{username}&#39;@&#39;{hostname}&#39; IDENTIFIED BY &#39;{passwordString}&#39;;&lt;br /&gt;
				&lt;br /&gt;
				#예시&lt;/span&gt;&lt;/p&gt;

				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CREATE USER &#39;test&#39;@&#39;%&#39; IDENTIFIED WITH mysql_native_password BY &#39;Mysql12!&#39;;&nbsp;&lt;/span&gt;&lt;/p&gt;

				&lt;p&gt;&nbsp;&lt;/p&gt;

				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;* hostname : 사용자가 연결할 호스트, % : 모든 아이피 허용&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;

	&lt;p&gt;&nbsp;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문을 이용하여 해당 사용자의 host가 모든 IP(%)인지 또는 CUBRID IP인지 확인합니다. 또한 plugin이 &ldquo;mysql_native_password&rdquo;로 설정이 되어 있는지 확인합니다.&lt;/span&gt;&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;mysql&gt; select user,host, plugin&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from mysql.user;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;| user | host | plugin |&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;| test | %&nbsp; | &lt;strong&gt;mysql_native_password&lt;/strong&gt; |&nbsp; &nbsp; &nbsp;&lt;br /&gt;
			| root | % | &lt;strong&gt;mysql_native_password &lt;/strong&gt;|&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;....&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;3. 사용자 테이블 권한 설정&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;만약 사용자가 테이블 권한이 없을 시&nbsp;설정이 필요합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문을 통해서 모든 db 및 테이블에 권한을 주고 로컬 및 리모트에서도 접속 가능하도록 설정합니다.&lt;/span&gt;&lt;br /&gt;
&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#구문&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;GRANT ALL PRIVILEGES ON [데이터베이스명.테이블명] to [사용자@호스트] identified by &#39;비밀번호&#39; [with grant option];&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;br /&gt;
			&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#예시&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;GRANT ALL PRIVILEGES ON *.* TO &#39;test&#39;@&#39;%&#39;;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID DBLink 설정&lt;/span&gt;&lt;/h2&gt;

&lt;p align=&quot;left&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음은 CUBRID에서 MySQL DBLink를 위한 설정 방법입니다.&lt;br /&gt;
설정에 필요한 부분들은 다음과 같이 설정하였습니다.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL Server IP&nbsp;:&nbsp;192.168.64.155&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL Server Port : 56000&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL&nbsp;DB명 : test_db&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL&nbsp;계정&nbsp;: root&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL&nbsp;계정 암호 : Mysql12!&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID Server IP : 192.168.64.145&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID DB명 : demodb&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL테이블 정보&nbsp;&lt;/span&gt;&lt;/h4&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p style=&quot;margin-left:9.4pt;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;create table mysql_code(&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p style=&quot;margin-left:9.4pt;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;s_name char(1),&lt;/span&gt;&lt;/p&gt;

			&lt;p style=&quot;margin-left:9.4pt;&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;f_name varchar(6)&lt;br /&gt;
			);&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;1. MySQL 설정&nbsp;&lt;/span&gt;&lt;/h3&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;1.1) MySQL &lt;strong&gt;ODBC Driver 설치&lt;/strong&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;MySQL ODBC Driver 다운로드 사이트:&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;링크를 통하여 OS 버전과 MySQL 버전에 맞는 파일을 다운로드하여 설치합니다.&nbsp;&lt;br /&gt;
	&nbsp;&lt;a data-reactroot=&quot;&quot; data-token-index=&quot;1&quot; href=&quot;https://dev.mysql.com/downloads/connector/odbc/&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;https://dev.mysql.com/downloads/connector/odbc/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[root@localhost ~]# yum install -y https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.31-1.el7.x86_64.rpm&nbsp;&nbsp;&lt;/span&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;

	&lt;p&gt;&nbsp;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;strong&gt;1.2)&nbsp;ODBC Driver Name 확인 및 설정&lt;/strong&gt;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;Linux의 경우, MySQL ODBC Driver Name을 설정하기 위해서는 unixODBC를 설치 한 후 /etc/odbcinit.ini 파일에 Driver name을 작성해야 합니다&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;unixODBC 드라이버 관리자는 Linux 및 UNIX 운영 체제에서 ODBC 드라이버 와 함께 사용할 수 있는 오픈 소스 ODBC 드라이버 관리자이다.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;unixODBC 설치 예시입니다. 버전에 맞는 ODBC를 설치를 진행합니다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;
	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[root@localhost]$ yum install unixODBC.x86_64&nbsp;&nbsp;&lt;/span&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
	&lt;br /&gt;
	&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;설치 관련 자세한 내용은&nbsp;&lt;a href=&quot;http://www.unixodbc.xn--org-yh0o/&quot; title=&quot;링크 따라가기 &quot;&gt;http://www.unixodbc.org의&lt;/a&gt;&nbsp;download를 참고 바랍니다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;unixODBC 설치 확인 및&nbsp;odbcinst.ini 위치를 알 수 있다.&lt;/span&gt;&lt;br /&gt;
	&nbsp;&lt;/p&gt;

	&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td&gt;
				&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[root@localhost ~]# odbcinst -j&lt;br /&gt;
				unixODBC 2.3.1&lt;br /&gt;
				DRIVERS............: /etc/odbcinst.ini&lt;br /&gt;
				SYSTEM DATA SOURCES: /etc/odbc.ini&lt;br /&gt;
				FILE DATA SOURCES..: /etc/ODBCDataSources&nbsp;&nbsp;&lt;br /&gt;
				USER DATA SOURCES..: /root/.odbc.ini&lt;br /&gt;
				SQLULEN Size.......: 8&lt;br /&gt;
				SQLLEN Size........: 8&lt;/span&gt;&lt;/p&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;

	&lt;p&gt;&nbsp;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;1.3) odbcinst.ini 설정&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;odbcinst.ini 에 MySQL 드라이버를 설정을 해주어야합니다. 다운로드 받은 드라이브 위치를 Driver에 입력합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color:#696969;&quot;&gt;*CUBRID에서는 odbc.ini파일 설정이 필요 없음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;# 세션의 이름이 driver 이름이다.&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;# cubrid_gateway.conf의 CGW_LINK_ODBC_DRIVER_NAME 세션의 이름을 작성해야 한다.&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[&lt;strong&gt;mysql odbc driver&lt;/strong&gt;]&lt;br /&gt;
			Driver=/usr/lib64/libmyodbc8a.so&nbsp; &nbsp;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2. CUBRID 설정&lt;/span&gt;&lt;/h3&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID gateway&nbsp;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;게이트웨이는 CUBRID 데이터베이스 서버가 타 데이터베이스 서버에 연결할 수 있도록 중계하는 미들웨어이다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;cubrid_gateway.conf 설정&lt;/span&gt;&lt;/h4&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;SERVICE 를 ON으로 변경&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CGW_LINK_SERVER_IP 에 mysql database 서버의 ip주소 설정&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CGW_LINK_SERVER_PORT 에 mysql&nbsp;database 서버의 port 설정&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CGW_LINK_ODBC_DRIVER_NAME 에 odbcinst.ini에서 설정한 세션의 이름(mysql odbc driver)&nbsp;&lt;/span&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color:#696969;&quot;&gt;&lt;em&gt;*추가적인 GATEWAY 파라메터 설명은 &lt;strong&gt;메뉴얼&lt;/strong&gt;을 참고해주시기 바랍니다.&nbsp;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp;&nbsp;&lt;a href=&quot;https://www.cubrid.org/manual/ko/11.2/sql/dblink.html&quot;&gt;&lt;span style=&quot;color:#696969;&quot;&gt;https://www.cubrid.org/manual/ko/11.2/sql/dblink.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[gateway]&lt;br /&gt;
			MASTER_SHM_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =50001&lt;br /&gt;
			ADMIN_LOG_FILE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=log/gateway/cubrid_gateway.log&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[%mysql_gateway]&lt;br /&gt;
			SERVICE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&lt;strong&gt;ON&lt;/strong&gt;&lt;br /&gt;
			SSL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =OFF&lt;br /&gt;
			APPL_SERVER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =CAS_CGW&lt;br /&gt;
			BROKER_PORT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&lt;strong&gt;56000&lt;/strong&gt;&lt;br /&gt;
			MIN_NUM_APPL_SERVER &nbsp; &nbsp; =5&lt;br /&gt;
			MAX_NUM_APPL_SERVER &nbsp; &nbsp; =40&lt;br /&gt;
			APPL_SERVER_SHM_ID &nbsp; &nbsp; &nbsp;=56000&lt;br /&gt;
			LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =log/gateway/sql_log&lt;br /&gt;
			ERROR_LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =log/gateway/error_log&lt;br /&gt;
			SQL_LOG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =ON&lt;br /&gt;
			TIME_TO_KILL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=120&lt;br /&gt;
			SESSION_TIMEOUT &nbsp; &nbsp; &nbsp; &nbsp; =300&lt;br /&gt;
			KEEP_CONNECTION &nbsp; &nbsp; &nbsp; &nbsp; =AUTO&lt;br /&gt;
			CCI_DEFAULT_AUTOCOMMIT &nbsp;=ON&lt;br /&gt;
			APPL_SERVER_MAX_SIZE &nbsp; &nbsp;=256&lt;br /&gt;
			CGW_LINK_SERVER &nbsp; &nbsp; &nbsp; &nbsp; =MYSQL&lt;br /&gt;
			CGW_LINK_SERVER_IP &nbsp; &nbsp; &nbsp;=&lt;strong&gt;192.168.64.155&lt;/strong&gt;&lt;br /&gt;
			CGW_LINK_SERVER_PORT &nbsp; &nbsp;=3306&lt;br /&gt;
			CGW_LINK_ODBC_DRIVER_NAME &nbsp; =&lt;strong&gt;mysql odbc driver&lt;/strong&gt;&lt;br /&gt;
			CGW_LINK_CONNECT_URL_PROPERTY &nbsp; &nbsp; &nbsp; =&quot;charset=utf8;PREFETCH=100;NO_CACHE=1&quot;&nbsp;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;cubrid_gateway.conf 확인&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;gateway 설정값을 확인 시&nbsp;cubrid_gateway.conf 파일 열기 또는 cubrid gateway info 명령어를 통해 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;/ul&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[cubrid@localhost]$ cubrid gateway info&lt;/span&gt;

			&lt;p&gt;&lt;br /&gt;
			&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#&lt;br /&gt;
			# cubrid_gateway.conf&lt;br /&gt;
			#&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;# gateway parameters were loaded from the files&lt;br /&gt;
			# /home/cubrid/CUBRID-11.2.1.0677-82f461a-Linux.x86_64/conf/cubrid_gateway.conf&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;# gateway parameters&lt;br /&gt;
			[gateway]&lt;br /&gt;
			MASTER_SHM_ID &nbsp; =50001&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt; [%mysql_gateway]&lt;br /&gt;
			SERVICE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =ON&lt;br /&gt;
			APPL_SERVER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =CAS_CGW&lt;br /&gt;
			MIN_NUM_APPL_SERVER &nbsp; &nbsp; =5&lt;br /&gt;
			MAX_NUM_APPL_SERVER &nbsp; &nbsp; =40&lt;br /&gt;
			APPL_SERVER_SHM_ID &nbsp; &nbsp; &nbsp;=56000&lt;br /&gt;
			SSL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =OFF&lt;br /&gt;
			APPL_SERVER_MAX_SIZE &nbsp; &nbsp;=256&lt;br /&gt;
			SESSION_TIMEOUT &nbsp; &nbsp; &nbsp; &nbsp; =300&lt;br /&gt;
			LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =log/gateway/sql_log&lt;br /&gt;
			SLOW_LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=log/gateway/sql_log/&lt;br /&gt;
			ERROR_LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =log/gateway/error_log&lt;br /&gt;
			LOG_BACKUP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=OFF&lt;br /&gt;
			SOURCE_ENV &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=&lt;br /&gt;
			SQL_LOG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =ALL&lt;br /&gt;
			SLOW_LOG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=ON&lt;br /&gt;
			SQL_LOG_MAX_SIZE &nbsp; &nbsp; &nbsp; &nbsp;=10240&lt;br /&gt;
			LONG_QUERY_TIME &nbsp; &nbsp; &nbsp; &nbsp; =60.00&lt;br /&gt;
			LONG_TRANSACTION_TIME &nbsp; =60.00&lt;br /&gt;
			AUTO_ADD_APPL_SERVER &nbsp; &nbsp;=ON&lt;br /&gt;
			JOB_QUEUE_SIZE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=1024&lt;br /&gt;
			TIME_TO_KILL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=120&lt;br /&gt;
			ACCESS_LOG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=OFF&lt;br /&gt;
			ACCESS_LOG_MAX_SIZE &nbsp; &nbsp; =10240K&lt;br /&gt;
			ACCESS_LOG_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=log/gateway/&lt;br /&gt;
			ACCESS_LIST &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&lt;br /&gt;
			MAX_STRING_LENGTH &nbsp; &nbsp; &nbsp; =-1&lt;br /&gt;
			KEEP_CONNECTION &nbsp; &nbsp; &nbsp; &nbsp; =AUTO&lt;br /&gt;
			STATEMENT_POOLING &nbsp; &nbsp; &nbsp; =ON&lt;br /&gt;
			CCI_PCONNECT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=OFF&lt;br /&gt;
			ACCESS_MODE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =RW&lt;br /&gt;
			CONNECT_ORDER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =SEQ&lt;br /&gt;
			MAX_NUM_DELAYED_HOSTS_LOOKUP &nbsp; &nbsp;=-1&lt;br /&gt;
			RECONNECT_TIME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=600&lt;br /&gt;
			REPLICA_ONLY &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=OFF&lt;br /&gt;
			TRIGGER_ACTION &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=ON&lt;br /&gt;
			MAX_QUERY_TIMEOUT &nbsp; &nbsp; &nbsp; =0&lt;br /&gt;
			ENABLE_MONITOR_HANG &nbsp; &nbsp; =OFF&lt;br /&gt;
			ENABLE_MONITOR_SERVER &nbsp; =ON&lt;br /&gt;
			REJECTED_CLIENTS_COUNT &nbsp;=0&lt;br /&gt;
			STRIPPED_COLUMN_NAME &nbsp; &nbsp;=ON&lt;br /&gt;
			CACHE_USER_INFO &nbsp; &nbsp; &nbsp; &nbsp; =OFF&lt;br /&gt;
			SQL_LOG2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=0&lt;br /&gt;
			BROKER_PORT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =56000&lt;br /&gt;
			APPL_SERVER_NUM &nbsp; &nbsp; &nbsp; &nbsp; =5&lt;br /&gt;
			APPL_SERVER_MAX_SIZE_HARD_LIMIT =1024&lt;br /&gt;
			MAX_PREPARED_STMT_COUNT =2000&lt;br /&gt;
			PREFERRED_HOSTS &nbsp; &nbsp; &nbsp; &nbsp; =&lt;br /&gt;
			JDBC_CACHE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=OFF&lt;br /&gt;
			JDBC_CACHE_HINT_ONLY &nbsp; &nbsp;=OFF&lt;br /&gt;
			JDBC_CACHE_LIFE_TIME &nbsp; &nbsp;=1000&lt;br /&gt;
			CCI_DEFAULT_AUTOCOMMIT &nbsp;=ON&lt;br /&gt;
			MONITOR_HANG_INTERVAL &nbsp; =60&lt;br /&gt;
			HANG_TIMEOUT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;=60&lt;br /&gt;
			REJECT_CLIENT_FLAG &nbsp; &nbsp; &nbsp;=ON&lt;br /&gt;
			CGW_LINK_SERVER &nbsp; &nbsp; &nbsp; &nbsp; =MYSQL&lt;br /&gt;
			CGW_LINK_SERVER_IP &nbsp; &nbsp; &nbsp;=192.168.64.155&lt;br /&gt;
			CGW_LINK_SERVER_PORT &nbsp; &nbsp;=3306&lt;br /&gt;
			CGW_LINK_ODBC_DRIVER_NAME &nbsp; &nbsp; &nbsp; =mysqltest&lt;br /&gt;
			CGW_LINK_CONNECT_URL_PROPERTY &nbsp; =charset=utf8;PREFETCH=100;NO_CACHE=1&lt;/span&gt;&lt;br /&gt;
			&nbsp;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h4&gt;&nbsp;&lt;/h4&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;gateway 상태 확인&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;cubrid gateway status 명령어를 통하여 현재 gateway 상태를 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;cubrid gateway info 예시)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;[cubrid@localhost]$&nbsp;cubrid gateway status&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;@ cubrid gateway status&lt;br /&gt;
			% oracle_gateway OFF&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;% mysql_gateway&lt;br /&gt;
			----------------------------------------------------------------------&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; ID &nbsp; PID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;QPS &nbsp; &nbsp; &nbsp; &nbsp;LQS &nbsp; PSIZE STATUS&lt;br /&gt;
			----------------------------------------------------------------------&nbsp; &nbsp;&nbsp;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 44165 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp;199128 IDLE&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 44166 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; 50928 IDLE&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 44167 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; 50928 IDLE&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4 44168 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; 50928 IDLE&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 44169 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; 50928 IDLE&lt;/span&gt;&lt;br /&gt;
			&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h2&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CUBRID DBLink 사용 예시&lt;/span&gt;&lt;/h2&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;1. MySQL 데이터 조회&lt;/span&gt;&lt;/h3&gt;

&lt;p align=&quot;left&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;타 데이터베이스의 데이터 조회를 위한 DBLINK Query문 작성 방법은 2가지이며 그 중 FROM절에 DBLINK 구문을 작성하여 데이터를 조회하는 방법입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;SELECT * FROM DBLINK (&#39;CUBRID IP:CUBRID-GATEWAY-PORT:DBNAME:USER:PASSWORD:&#39;,&#39;SELECT select-list FROM remote_table&#39;) AS t(column-name column-type, &hellip;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color:#696969;&quot;&gt;*MySQL DBLINK 실행 전 CUBRID gateway를 시작하여야 합니다.(cubrid&nbsp;gateway start)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문은 CUBRID에서 MySQL의 mysql_code 테이블 정보를&nbsp;조회하는 예시입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; SELECT *&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; FROM DBLINK (&#39;192.168.64.145:56000:test_db:root:Mysql12!:&#39;,&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;select s_name, f_name from mysql_code&#39;)&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AS M(s_name varchar(20), f_name varchar(20));&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;s_name f_name&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;============================================&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;X&#39; &#39;Mixed&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;W&#39; &#39;Woman&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;M&#39; &#39;Man&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;B&#39; &#39;Bronze&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;S&#39; &#39;Silver&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;G&#39; &#39;Gold&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2. MySQL 서버 등록 후 데이터 조회&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;타 데이터베이스의 데이터 조회를 위한 DBLINK Query문 중 SERVER를 활용하여 데이터를 조회하는 방법입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DBLINK Query를 작성할 때 마다 매번 작성해야 하는 번거로움과 사용자 정보(id, password) 가 외부로 노출될 우려가 있습니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;이런 번거로움과 정보 보호를 위해 CREATE SERVER문을 이용하면, Query문 보다 간단하고, 사용자 정보 보호에 도움이 됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2.1) 서버 등록&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CREATE SERVER문을 사용하여 원격 접속 정보를 생성합니다. 생성된 서버는&nbsp;DBLINK를 이용하는 SELECT&nbsp;질의를 수행 할 때 원격 서버를 지정하는데 사용합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;CREATE SERVER server-name(HOST,PORT,DBNAME,USER,PASSWORD,PROPERTIES,COMMENT);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;color:#696969;&quot;&gt;*option: PASSWORD,PROPERTIES,COMMENT&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문은 &quot;remote_mysql&quot;라는 이름으로 서버를 등록하는 예시입니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; CREATE SERVER remote_mysql&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; ( HOST=&#39;192.168.64.145&#39;,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;PORT=56000,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DBNAME=test_db,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;USER=root,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;PASSWORD=&#39;Mysql12!&#39;);&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;Execute OK. (0.032039 sec) Committed. (0.001417 sec)&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2.2) 서버 등록 확인&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문은 DB_SERVER 테이블에&nbsp;서버가 등록된 것을 확인하는 예시입니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; SELECT *&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; FROM DB_SERVER&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; WHERE link_name=&#39;remote_mysql&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;link_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;port &nbsp;db_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;owner &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;comment&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;=====================================================================================================================&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;remote_mysql&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;192.168.64.145&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;56000 &nbsp;&#39;test_db&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;root&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;PUBLIC&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;2.3) 서버 등록 후 데이터 조회&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음은 Create server 구문으로 만든 remote_mysql(서버명)을&nbsp;조회하는 예시입니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;SELECT * FROM DBLINK (&#39;서버명&#39;,&#39;SELECT select-list FROM remote_table&#39;) AS t(column-name column-type, &hellip;);&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; SELECT * &nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; FROM DBLINK (remote_mysql,&#39;select s_name, f_name from mysql_code&#39;)&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; AS M(s_name varchar(20), f_name varchar(20));&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;s_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f_name&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;============================================&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;X&#39;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Mixed&#39;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;W&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;Woman&#39;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;M&#39; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;Man&#39;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;B&#39;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Bronze&#39;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;S&#39;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Silver&#39;&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&#39;G&#39;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;Gold&#39;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;3. MySQL VIEW 등록 및 조회&nbsp;&lt;/span&gt;&lt;/h3&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;3.1) MySQL View 등록&nbsp;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;mysql 데이터 조회 구문을 View로 생성하여 사용이가능합니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문은 CUBRID의 event 테이블과 MySQL의 mysql_code 테이블을 조인하여&nbsp;View(test_view)로&nbsp;등록하는 예시입니다.&nbsp;&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; &nbsp;CREATE VIEW test_view&nbsp;as&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SELECT *&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM DBLINK (&#39;192.168.64.153:56000:test_db:root:Mysql12!:&#39;,&#39;select * from mysql_code&#39;)&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AS M(s_name varchar(20), f_name varchar(20));&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;h4&gt;&lt;br /&gt;
&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;3.2) MySQL&nbsp;View 등록 후 조회&nbsp;&lt;/span&gt;&lt;/h4&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;다음 구문은 View(test_view) 등록 후 조회하는 예시입니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; select * from test_view;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; f_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s_name&lt;br /&gt;
			============================================&nbsp;&nbsp;&lt;br /&gt;
			&nbsp; &#39;Mixed&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;X&#39;&lt;br /&gt;
			&nbsp; &#39;Woman&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;W&#39;&lt;br /&gt;
			&nbsp; &#39;Man&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;M&#39;&lt;br /&gt;
			&nbsp; &#39;Bronze&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;B&#39;&lt;br /&gt;
			&nbsp; &#39;Silver&#39;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;S&#39;&lt;br /&gt;
			&nbsp; &#39;Gold&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;G&#39;&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h3&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;4. HA 환경에서 DBLink&nbsp;&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;HA 환경에서 절체되었을 경우 기존 슬레이브에서 mysql 연결을 위해 gateway 로 접속을 해야합니다. 일반적으로 gateway 는 CUBRID DB 서버상에 설정하는데, 절체되었을때 기존 마스트가 shutown 된 경우, 기존 마스터의 gateway 로는 접속이 불가능해지므로 MySQL&nbsp;db link 연결을 위해 접속할 gateway 는 슬레이브 상의 gateway 로 접속을 해야 합니다.&nbsp;&lt;br /&gt;
따라서 HA 환경에서는 master/slave 모두 동일하게 gateway 를 설정하여야 하며, DB link 를 위한 서버 설정시 gateway 서버의 주소를 localhost 로 해줘야, 절체후 자신의 서버의 gateway 를 통해 mysql 과 연결이 가능해집니다.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p align=&quot;left&quot;&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DBLink 시 사용하는 server는 master에서&nbsp;등록 시 slave에도 복제가 됩니다.&lt;/span&gt;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; &nbsp;CREATE SERVER ha_remote_mysql&nbsp;&nbsp;&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(HOST=&#39;localhost&#39;,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PORT=56000,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DBNAME=test_db,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;USER=root,&lt;br /&gt;
			&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PASSWORD=&#39;Mysql12!&#39;);&nbsp;&lt;/span&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;master와 slave는 동일하게 적용된것을 확인할 수 있습니다.&nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot;&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#Master&nbsp; DB_SERVER&nbsp; 테이블 결과&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt; SELECT&nbsp; * &nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;FROM DB_SERVER&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;WHERE link_name=&#39;ha_remote_mysql&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; link_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; port &nbsp;db_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; properties &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;owner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; comment&lt;br /&gt;
			====================================================================================================================&lt;br /&gt;
			&nbsp; &#39;ha_remote_mysql&#39; &nbsp; &nbsp; &#39;localhost&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 56000 &nbsp;&#39;test_db&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;root&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;DBA&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;#Slave DB_SERVER 테이블 결과&nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;csql&gt;&nbsp; SELECT * &nbsp;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;FROM DB_SERVER&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;WHERE link_name=&#39;ha_remote_mysql&#39;;&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&nbsp;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;=== &lt;Result of SELECT Command in Line 1&gt; ===&lt;/span&gt;&lt;/p&gt;

			&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;&nbsp; link_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; host &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; port &nbsp;db_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; properties &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;owner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; comment&lt;br /&gt;
			====================================================================================================================&lt;br /&gt;
			&nbsp; &#39;ha_remote_mysql&#39; &nbsp; &nbsp; &#39;localhost&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 56000 &nbsp;&#39;test_db&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;root&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NULL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;DBA&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL&lt;/span&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;DBLink 사용 시 볼 수 있는 에러 메시지&lt;/span&gt;&lt;/h4&gt;

&lt;ol&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ERROR: dblink - Cannot connect to CUBRID CAS&lt;/span&gt;&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;
		&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;원인 : ip,port 정보 불일치&lt;/span&gt;&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ERROR: dblink - Connection timed out&lt;/span&gt;&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;
		&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;원인 : MySQL 미구동&lt;/span&gt;&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;ERROR: dblink - not supported type SQL_UNKNOWN_TYPE(0). [CAS INFO 192.168.64.145:56000,1,32448]&lt;/span&gt;&lt;/p&gt;

	&lt;ul&gt;
		&lt;li&gt;
		&lt;p&gt;&lt;span style=&quot;font-family:arial,helvetica,sans-serif;&quot;&gt;원인 : MySQL 버전 과 ODBC Driver 버전 불일치, 버전 동일 설정 후 정상동작&lt;/span&gt;&lt;/p&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;

&lt;p&gt;&nbsp;&lt;/p&gt;&lt;/div&gt;]]></description>
						<pubDate>Tue, 25 Oct 2022 13:30:50 +0900</pubDate>
								</item>
			</channel>
</rss>
