Database: 227개의 글
● 설정 기본 하드웨어 : 대용량 InnoDB에서는 CPU보다 메모리가 성능에 더 영향을 미칩니다. 빠른 입출력을 원한다면 SSD나 SAS를 사용하는게 유리 합니다. ● my.cnf [code lang="bash"] vi /etc/my.cnf [/code] [code lang="Apache"] [client] port = 3306 socket = /tmp/mysql.sock [mysqld] # generic configuration options port = 3306 socket = /tmp/mysql.sock back_log = 100 max_connections = 500 max_connect_errors = 10 table_open_cache = 2048 max_allowed_packet = 16M..
● MySQL Memory MySQL은 하나의 프로세스로 동작 합니다. 세션은 thread로 확장되고 시스템 자원을 할당 받습니다. MySQL의 Memory 부분은Connection 수의 영향을 받는 부분이며 항상 주의를 요해야 합니다. ● Memory Management MySQL 레퍼런스에 나온 식 : innodb_buffer_pool_size + key_buffer_size + max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) 레퍼런스에 달린 코멘트 (by David Tonhofer) total memory = innodb_buffer_pool_size + key_buffer_size + innodb_additional_me..
Index 개요 Index는 MYI (MySQL Index)파일에 저장 됩니다. Index가 설정되지 않았다면 Table Full Scan이 일어 나 성능이 저하 되거나 치명적인 장애가 발생 합니다. Index는 검색 속도를 향상 시키는 장점이 있지만, update, insert, delete 속도는 저하 됩니다. 이는 Table의 Index 색인 정보를 갱신하는 비용이 추가 되기 때문입니다. Index 설정시 이런 부분들을 위의 하여 효율적인 컬럼 선정이 이루어 져야 합니다. 주 목적은 다음과 같습니다. 조건과 일치하는 열을 빨리 찾기 위해 사용. JOIN시 다른 Table의 열을 추출 하기 위해 사용. Max, Min값을 찾기 위해 사용. 다음과 같은 사항을 고려 하여 사용하면 좋습니다. Index의..
mysqldump MySQL의 대표적인 Logical 백업 프로그램으로서 스토리지 엔진에 상관 없이 백업을 받을 수 있는 tool 입니다. mysqldump 는 기본적으로 dump를 하려고 하는 테이블에 대한 SELECT 권한, dump하려는 view에 대한 SHOW VIEW 권한, dump하려는 trigger에 대한 TRIGGER 권한을 가지고 있어야 합니다. 만약, --single-transaction 옵션을 사용할 수 없는 스토리지 엔진이라면 LOCK TABLES 권한이 추가적으로 필요합니다. 만약, 다른 옵션을 추가적으로 사용한다면 추가적인 다른 권한도 필요하게 됩니다. dump file을 reload하기 위해, 계정은 dump file을 생성했을 때 가졌던 권한을 다 가지고 있어야 합니다. 사용..

이번 글에서는 DECIMAL 타입에서 사칙연산이 동작하는 방식에 대해서 정리해보겠습니다. DECIMAL 연산에 대한 설명에 앞서서 간단하게 DECIMAL이라는 타입에 대해 알아보겠습니다. DECIMAL은 Precision과 Scale로 정의되어 있습니다. Precision은 전체 자릿수, Scale은 .(점) 오른쪽에 오는, 소수 자릿수를 의미합니다. SELECT CAST(1.0005 as DECIMAL(4, 3)) 위 예시에서는 그림과 같이 precision과 scale을 표시할 수 있고 scale의 범위를 넘은 소수점의 값(5)은 반올림 하여 위 query의 결과는 1.001이 됩니다. (정수가 자릿수를 초과할 경우에는 overflow error가 발생합니다.) Calculation 그럼 DECIMA..
intro 이번 글에서 collation 충돌이 발생하는 원인과 해결 방법에 대해 다뤄보겠습니다. 이번 글에서는 collation에 대한 설명은 따로 하지 않겠습니다. collation에 대해 알고싶으신 분은 다음 링크를 참고해 주시기 바랍니다. 설명을 위해 다음과 같은 두 테이블을 정의하겠습니다. CREATE TABLE korean (id INT, name VARCHAR(100) COLLATE Korean_Wansung_CI_AS) CREATE TABLE american (id INT, name VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC) 하나의 테이블 collation 값은 Korean_Wansung_CI_AS(한국어 사전 기준)으로 또 다른 하나의 테이블..

intro 이번 글에서는 문자 데이터 정렬, Collation에 대하여 살펴보겠습니다. collation은 데이터 정렬, 비교하는 방식을 지정하는 명령어로 collation 설정에 따라 작업 결과가 다르게 나타날 수 있습니다. 자세한 설명에 앞서, 다음 쿼리를 통해 우리가 사용하고 있는 collation 설정값을 확인해 보겠습니다. SELECT name, collation_name FROM sys.databases; 위 쿼리문을 실행하면 아래와 같은 ( 환경에 따라 값은 다르게 나옵니다. ) 결과를 확인할 수 있습니다. name collation_name 1 master Korean_Wansung_CI_AS 2 sample Korean_Wansung_CI_AS master와 sample은 데이터베이스의 ..
하지만 해당 글의 예제에서는 transaction의 isolation level을 동일하게 설정하고 설명을 진행했습니다. '그렇다면 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?' 라는 의문이 들었고 이번 글에서는 이를 실험해 본 결과를 정리하려고 합니다. 참고로, 이번에는 MySQL이 아닌, MSSQL을 이용하여 예제를 진행하였습니다. 처음에는 같은 isolation level(READ COMMITTED)의 두 transaction이 어떻게 동작하는지 먼저 살펴보겠습니다. #write transaction BEGIN TRAN SET TRANSACTION ISOLATION LEVEL READ COMMITTED INSERT INTO "dbo"."isolation_..
이번 글에서는 MySQL의 Delimiter 명령어에 대해 다뤄보겠습니다. 최근 Procedure를 정의하면서 다음과 같은 SQL문을 사용하였습니다. mysql> DELIMITER $$ mysql> CREATE PROCEDURE insert_test() -> BEGIN -> DECLARE i INT; -> SET i = 0; -> WHILE i INSERT INTO account(createDatetime) VALUES(now()); -> SET i = i + 1; -> END WHILE; -> END $$ mysql> DELIMITER ; 맨 처음과 끝에 Delimiter 명령어를 사용하였습니다. 본 글은 Delimiter에 관한 글이기 때문에 Procedure와 다른 명령어..
Transaction이란? Transaction이란 데이터베이스에서 실행하는 작업의 단위를 의미합니다. 이번 글에서는 송금하는 과정을 예제로 전체적인 개념들을 설명하고자 합니다. 또한 테스트를 위해 MySQL(InnoDB)을 활용하였습니다. 예제는 다음과 같습니다. A라는 사람이 B라는 사람에게 송금을 하면, 아래와 같은 과정으로 이루어 진다고 가정하겠습니다. A 계좌에서 출금 B 계좌에 위에서 차감된 금액만큼 입금 송금은 2 단계로 나누어지지만 크게는 하나의 transaction(작업)이라고 할 수 있습니다. 하지만 데이터베이스 관련된 모든 작업을 transaction이라고 하지는 않습니다. Transaction은 다음과 같은 특징(ACID)을 가져야합니다. Atomic Atomic이란 '원자의'란 의..