전체 글 96

트랜잭션 격리수준

DB 트랜잭션 격리 수준(Transaction isolation level)에 따른 동시성 이슈 가장 낮은 isolation 레벨 0의 경우 lock이 걸리지 않기때문에 속도는 매우 빠르나 동시 접근을 허용하기때문에 데이터 정합성에 문제가 생길 수 있고, 레벨3의 경우 완전히 lock을 걸어 동시 접근을 차단하고 순차적으로 처리 (serializable) 하기 때문에 정합성은 완벽하지만 동시에 처리 할 수 있는 양이 적어 속도가 매우 느리다. Isolation Level Dirty Read Nonrepeatable Read Phantom Read 레벨0 Read Uncommited 발생 발생 발생 레벨1 Read Committed X 발생 발생 레벨2 Repeatable Read X X 발생 레벨3 Se..

Mysql & Maria/admin 2023.11.29

root 비밀 번호 분실시

root 비밀번호를 분실할리가 없겠지만..? local [window] 에서 테스트 하려고 생성해둔 mysql server를 들어간지 오래 되었다 보니 까먹었다.. 비밀번호를 적어둔 것도 없고, 그렇다고 다시 설치하기엔 귀찮고 ..ㅋ root 비밀번호 분실했을때에 재설정 방법 공유 [window] 1. 실행중인 mysql 서버 중지 2. 관리자 권한이 있는 cmd 창에서 아래 방법 1,2 중 하나 실행 (설정파일 위치는 각자 위치에 맞게 mysql-init 파일 내용 ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 방법 1 . mysqld --init-file=C:\\mysql-init.txt 방법 2 . mysqld --defaults-file="C..

Mysql & Maria/admin 2023.11.28

Mysql lock 종류

MySQL에서는 여러 종류의 잠금(Lock)이 있습니다. 잠금은 데이터베이스에서 동시성을 관리하고 여러 트랜잭션 간의 충돌을 방지하기 위해 사용됩니다. 다음은 MySQL에서 주로 사용되는 잠금의 종류와 각 잠금 종류별로 발생 가능한 시나리오입니다 공유 잠금(Shared Lock): 설명: 여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 하는 잠금. 발생 가능한 시나리오: 여러 트랜잭션이 동일한 데이터를 동시에 읽는 경우. 배타적 잠금(Exclusive Lock): 설명: 트랜잭션이 데이터를 읽거나 쓰기 위해 특정 데이터에 독점적으로 접근하는 잠금. 발생 가능한 시나리오: 트랜잭션이 데이터를 수정하거나 삭제하는 경우. 읽기 잠금(Read Lock) 및 쓰기 잠금(Write Lock): 설명: InnoDB ..

Mysql & Maria/admin 2023.11.26

mysql lock 발생 테스트

- 어떤 경우에 lock 이 발생하는지, lock 원인을 찾는 방법 테스트 ## 테스트 테이블 생성 CREATE TABLE select_lock (col1 VARCHAR(50), col2 VARCHAR(50)); INSERT INTO select_lock VALUES('1st', 'first'); INSERT INTO select_lock VALUES('2nd', 'second'); 1. Session A ( autocommit = off 상태에서 select 쿼리 수행) status : lock 발생 SET autocommit =0; SELECT * FROM select_lock; 2. Session B (lock 상태 조회) Shared_read lock 발생 확인 SELECT l.object_typ..

Mysql & Maria/admin 2023.11.26

mysql 성능 I/O 읽기/쓰기 관련 측정

while true; do mysqladmin -u [username] -p[password] extended-status grep "Innodb_" sleep 60 done 쓰기 요청의 수 (QPS) 계산: Innodb_data_writes 변수는 InnoDB에서 발생한 총 디스크 쓰기 작업의 횟수를 나타냅니다. 두 시간 포인트 사이의 Innodb_data_writes의 증가를 측정하고, 그 기간 동안의 초로 나눠서 QPS를 계산할 수 있습니다. 총 쓰기 바이트 계산: Innodb_data_written 변수는 InnoDB에 의해 디스크에 쓰여진 총 바이트를 나타냅니다. 두 시간 포인트 사이의 Innodb_data_written의 증가를 측정하여 총 쓰기 바이트를 구할 수 있습니다. QPS당 쓰기 바이..

Mysql & Maria/admin 2023.11.02

full text index

전체 텍스트 검색은 첫 글자 뿐 아니라 중간의 단어나 문장으로도 인덱스를 생성해 주기 때문에, 전체 텍스트 인덱스를 통해 순식간에 검색 결과를 얻을 수 있다. InnoDB와 MyISAM 테이블만 지원하며, char, varchar, text타입 문자만 인덱싱이 가능하다. 인덱스 기법 Stop-word parser 👈 default 옵션 → 공백이나 Tab, 문장 기호, 또는 사용자가 정의한 문자열을 기준으로 토큰을 나누는 기법 ex> 아빠가 방에 들어갔다. → 아빠가 / 방에 / 들어갔다. N-gram parser → n-gram 기법을 사용하여 할당한 토큰의 크기 n만큼씩 데이터를 인덱스로 파싱해두었다가 사용하는 기법 ex> 아빠가 방에 들어갔다. → 아빠 / 빠가 / 방에 / 들어 / 어갔 / 갔다...

Mysql & Maria/admin 2023.09.07

mysql int(10) / bigint(20) 등 괄호 안 숫자의 의미

() 는 자리수를 선언하는 것이다. (10)이면 10자리 (20)이면 20자리까지 넣겠다는 의미이다. 괄호안에 별다른 선언을 하지 않으면 default가 int(11), bigint(20)이 된다. 만약에 int(11)을 초과해서 int(20)으로 선언했을경우는 어떻게 될까 최대 10자리이고 11자리인 이유는 1자리는 음수를 표시하기 위함이다. 아래 테스트 참조 max 입력 값이 4,294,967,295 이므로 43억개 이상의 데이터가 필요하다면 int 형 대신 bigint로 선언이 필요할 듯 하다~ data type 별 입력 가능 범위

Mysql & Maria/admin 2023.07.20

Ascending index vs Descending index

Ascending index : 작은 값의 인덱스 키가 B-Tree의 왼쪽으로 정렬된 인덱스 Descending index : 큰 값의 인덱스 키가 B-Tree의 왼쪽으로 정렬된 인덱스 Forward index scan (Forward scan) : 인덱스 키의 크고 작음에 관계없이 인덱스 리프 노드의 왼쪽 페이지부터 오른쪽으로 스캔 Backward index scan (Backward scan) : 인덱스 키의 크고 작음에 관계없이 인덱스 리프 노드의 오른쪽 페이지부터 왼쪽으로 스캔 Descending index 지원 - Mysql 8.0 에서 부터 지원한다. - MariaDB 는 10.11 에서 부터 지원하는 듯? https://mariadb.com/kb/en/descending-indexes/ De..

Mysql & Maria/admin 2023.07.06

MySQL Character set 처리

MySQL에서 설정 가능한 Character set 관련 변수들은 아래와 같은 것들이 있다. character_set_system (설정 불가능 변수) MySQL 서버가 Identifier를 저장할 때 사용하는 Character set이며, 이 값은 섧정 불가능하고 항상 utf8로 설정되어 있다 character-set-server MySQL 서버의 기본 Character set character_set_client MySQL 클라이언트의 기본 Character set character_set_connection 쿼리 문장에서 인트로듀서가 없는 리터럴 또는 Number를 String으로 변환할 때 사용하는 Character set character_set_database MySQL 데이터베이스의 Defa..

Mysql & Maria/admin 2023.07.05

[mysql] view목록 확인

1. SHOW FULL TABLES SHOW FULL TABLES IN WHERE table_type LIKE 'VIEW'; FULL 키워드를 붙이지 않으면 table_type 컬럼이 없어 조회되지 않는다. 2. SELECT ~ FROM information_schema SHOW FULL TABLES 명령과 달리 모든 데이터베이스 내에 존재하는 View 목록을 확인할 수 있다. SELECT table_schema, table_name, table_type FROM information_schema.TABLES WHERE table_type LIKE 'VIEW'; 만약 특정 데이터베이스에 대한 View 목록만 확인하고 싶다면 WHERE 절로 조건을 추가한다. SELECT table_schema, table..

카테고리 없음 2023.05.19