Database 121

[MySQL] Connection 수 확인

최근 MySQL DB에서 Too many connections 에러가 발생하면서 정상적으로 기능하지 않았던 적이 있었다. 데이터베이스와 연결된 클라이언트의 수, 즉 접속 수가 너무 많아서 발생한 에러인데, 최대 접속 가능 수와 현재 접속 수를 확인하는 쿼리를 적어둔다. 최대 접속 가능한 수(max_connections) 확인 SHOW VARIABLES LIKE '%max_connection%'; 이 데이터베이스는 최대 1000개의 접속을 허용한다. 현재 접속 수(Threads_connected) 확인 MySQL에 접속되어 있다는 것은 각각에 대해 Thread가 실행되고 있는 것이다. 따라서 연결된 스레드 수가 바로 접속 수에 해당한다. SHOW STATUS LIKE 'Threads_connected'; ..

Database 2022.03.10

[MySQL/MariaDB] 예약어가 포함된 컬럼/DB 사용

SQL는 다른 프로그래밍 언어와 마찬가지로 예약어가 존재하며, 버전이 업그레이드되면서 새로운 예약어가 추가되곤 한다. 때문에 MySQL/MariaDB 등을 업그레이드할 때에는 업그레이드되는 버전에 추가되는 예약어가 기존의 선언된 데이터베이스명, 테이블명, 컬럼명 등으로 사용되고 있지는 않은지 확인 및 조치해야 한다. 업그레이드 후 쿼리 수행 시 컬럼명이 아닌 예약어로 인식되어 아래와 같은 syntax 에러가 발생하기 때문이다. order는 데이터를 오름차순, 또는 내림차순으로 정렬하여 출력하기 위한 예약어이다. 해결 방법은 어렵지 않다. 방법 1. 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 수정한다. 방법 2. 쿼리 수행 시 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 `(grave ac..

Database 2022.01.29

[MySQL/MariaDB] 테이블 목록 확인

이 글에서는 데이터베이스의 테이블 목록 확인 방법을 정리해둔다. 방법 1. 현재 데이터베이스의 테이블 목록 확인 SHOW TABLES; 2. 테이블 이름으로 현재 데이터베이스의 테이블 목록 필터링 SHOW TABLES LIKE 'KEYWORD'; # 예시 SHOW TABLES LIKE 'P%'; SHOW TABLES LIKE 'p%'; 3. 다른 데이터베이스의 테이블 목록 확인 SHOW TABLES FROM ; # 예시 SHOW TABLES FROM information_schema; # 테이블명 필터링 예시 SHOW TABLES FROM information_schema LIKE 'TABLE%'; 4. 데이터베이스의 테이블 상태 정보 확인 SHOW TABLE STATUS; # 특정 데이터베이스의 테이블..

Database 2022.01.09

[MySQL/MariaDB] 프로세스 목록 확인

현재 실행 중인 작업을 확인하는 방법에 대해 적어둔다. Query SHOW PROCESSLIST; SHOW FULL PROCESSLIST; FULL 키워드 없이 사용하면, Info 필드 값이 100자로 제한된다. 또는 아래 쿼리로도 검색할 수 있다. SELECT * FROM information_schema.processlist ORDER BY id; # Command = Sleep 인 경우 제외 SELECT * FROM information_schema.processlist WHERE command != 'Sleep'; 실행 결과 필드 의미 필드 의미 Id Connection Identifier. 연결 아이디. User 명령을 실행한 MySQL 사용자 Host 명령을 실행한 클라이언트의 호스트 이름. ..

Database 2021.11.08

[MySQL/MariaDB] DELETE / TRUNCATE

DELETE, TRUNCATE는 두 개 모두 테이블 내용을 삭제하는 쿼리이다. 하지만 둘이 완전히 같은 기능을 하는 것은 아니다. 두 쿼리의 특징을 적어둔다. DELETE DML(Data Manipulation Language, 데이터 조작 언어) 중 하나 [ WITH [ ,...n ] ] DELETE [ TOP ( expression ) [ PERCENT ] ] [ FROM ] { | rowset_function_limited [ WITH ( [ ...n ] ) ] } [ ] [ FROM [ ,...n ] ] [ WHERE { | { [ CURRENT OF { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } } ] [ OPTION ( [ ,...n ] )..

Database 2021.10.15

[MySQL/MariaDB] INSERT IGNORE

MySQL에서 INSERT문을 사용하여 테이블이 데이터를 저장할 때, Key에 해당하는 값이 테이블에 이미 존재하는 경우 아래와 같이 중복 키 에러가 발생한다. 예시 사진의 person 테이블은 PK로 phone 컬럼을 지정했다. 이런 에러가 발생하지 않도록 MySQL에서는 중복 레코드를 관리할 수 있는 몇 가지 방법(INSERT IGNORE, REPLACE INTO, INSERT INTO - ON DUPLICATE)을 제공한다. 이 글은 그 중 하나인 INSERT IGNORE에 대해 설명한다. INSERT IGNORE 키가 중복되는 경우 데이터를 추가하지 않고 무시한다. 키가 중복되지 않은 데이터만 테이블에 추가한다. 구문 INSERT IGNORE INTO VALUES (...); INSERT-INTO..

Database 2021.10.14

[MySQL/MariaDB] Partition Table 생성 및 확인

개요 2021.09.18 - [Partition] 개념 및 장단점에서 파티션의 개념과 특징, 파티셔닝의 종류와 분할 기준 등을 정리해보았다. 이번 글에서는 DB에서 파티션 테이블을 생성/수정/삭제하는 SQL 쿼리를 정리해둔다. 파티션 지원 여부 확인 일단 MySQL 서버에서 파티션을 사용할 수 있는지 확인해야 한다. SHOW VARIABLES LIKE '%partition%'; have_partitioning 항목이 YES이므로 파티션을 지원한다는 것을 알 수 있다. MySQL 5.6.29부터는 아래 명령으로 확인한다. SHOW PLUGINS; partition 항목이 ACTIVE이므로 파티션을 지원하는 버전임을 알 수 있다. 파티션 테이블 생성 일반 테이블 생성 후 파티셔닝 예시는 날짜를 기준으로 수평..

Database 2021.09.20

[Partition] 개념 및 장단점

Partition 논리적인 데이터 element를 다수의 entity로 쪼개는 행위 큰 테이블이나 인덱스를 파티션 단위로 분할하는 것 애플리케이션 입장에서는 물리적 데이터 분할을 인식하지 못할 수 있다. 배경 서비스의 크기 ⬆️, 데이터의 규모 ⬆️ → DBMS의 용량의 한계와 성능 저하 ⇒ 테이블을 파티션이라는 단위로 나뉘어 관리하는 파티셔닝 기법 등장 소프트웨어적인 데이터베이스 분산 처리 가능해짐 목적 성능 특정 DML과 쿼리 성능 향상, 대용량 WRITE 환경에서 효율적이다. full scan에서 데이터 접근 범위 감소 → 성능 향상 가용성 물리적인 파티셔닝 → 전체 데이터 훼손 가능성 ⬇️ 파티션 별로 독립적인 백업 및 복구가 가능하다. 관리용이성 큰 테이블을 줄일 수 있다. 장점 파티션 단위 백..

Database 2021.09.18

[MySQL] View

View 일종의 가상 테이블 행과 열을 가지고 있지만, 데이터를 실제로 저장하고 있지는 않다. View는 다른 테이블이나 다른 뷰에 저장된 데이터를 보여준다. 여러 테이블이나 뷰를 하나의 테이블처럼 볼 수 있다. 장단점 장점 특정 사용자에게 테이블 전체가 아닌 필요한 필드만을 보여준다. 쿼리 단순화 및 재사용 단점 이미 정의된 뷰 변경 불가 삽입, 삭제, 갱신 작업에 제한 사항이 있다. 생성 / 수정 /삭제 생성 CREATE VIEW 뷰이름 AS SELECT 필드이름1, 필드이름2, ... FROM 테이블이름 WHERE 조건 수정 ALTER VIEW 뷰이름 AS SELECT 필드이름1, 필드이름2, ... FROM 테이블이름 삭제 DROP VIEW 뷰이름

Database 2021.09.17

Procedure

프로시저; Procedure 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 Stored Procedure라고도 불린다. MySQL의 경우, 5.0 이후 표준 규격 지원 장점 하나의 요청으로 여러 SQL 실행 가능 → 네트워크 부하 ⬇️ 응용 프로그램 로직 없이 데이터베이스의 참조 무결성 유지 가능 처리 시간 ⬇️, 보수성 ⬆️ 쿼리문 보호, SQL Injection 보호, 권한 제어(특정 프로시저에만 접근 가능한 권한 부여) 일괄 작업에 유용, 절차적 기능 및 동적 쿼리 가능 단점 재사용성 ⬇️, 디버깅 및 유지보수에 어려움 형식 실질적으로 프로시저를 정의하는 부분은 create부터 end까지의 부분이다. DROP PROCEDURE IF EXISTS procedure_name; -- 이미..

Database 2021.09.16