본문 바로가기

분류 전체보기

(60)
InnoDB Adaptive Hash index 자주 사용되는 칼럼을 해시로 정의하여 b-tree를 타지 않고 바로 데이터에 접근할 수 있는 기능이다. 이름에서 유추할 수 있듯이 내부에서 자동으로 운영된다. 최초 메모리는 buffer pool 의 1/64 대상은 임의로 선정할 수 없다. 사용자는 on/off 만 가능 adaptive hash index 사용하기 set global innodb_adaptive_hash_index = 1; set global innodb_adaptive_hash_index = 0; adaptive hash index 모니터링 adaptive hash index 사용시 주의점 예를 들어 오랫동안 운영되던 테이블이 있는데 이를 운영중에 drop 했다고 가정하자. adaptive hash index 페이지에 drop 대상의 테..
InnoDB change buffer NSERT, UPDATE, DELETE 등 이 secondary index 에 영향을 주게 되는데 해당 페이지가 buffer pool 에 없다면 원칙적으로 바로 disk i/o 가 발생해야 한다. 이는 operation 에 의해 임의적으로 disk i/o 가 발생할 수 있다는 이야기 인데 이런 상황이 성능에 좋지 않기 때문에 change buffer 에 임의로 적용해 두고 시스템이 비교적 한가할때 change buffer 가 full 이 될때 해당 페이지를 select 에 의해 buffer pool 에 캐싱될때 혹은 주지적으로 disk i/o 를 발생시켜 성능을 향상 시키는 역할을 한다. change buffer 크기 change buffer 는 buffer pool 의 25% 정도 차지하고 최고 50%..
InnoDB Buffer pool buffer pool 은 InnoDB 가 억세스 하는 테이블 및 인덱스 데이터를 캐시하는 메모리 영역이다. 시스템 물리 메모리의 60~80% 정도를 할당 한다. 작업의 효율성을 위해 복수의 행을 보관할 수 있도록 페이지로 나뉘며 링크된 페이지 목록으로 구현된다. 오랫동안 참조되지 않은 페이지는 LRU 알고리즘으로 만료 시킨다. buffer pool 은 2개의 하위 리스트로 구성된다. new sublist buffer pool 의 5/8 공간을 차지 최근에 참조되면 이 sublist 에 추가 된다. old sublist buffer pool 의 3/8 공간을 차지 참조되지 않을 수록 점차 이 sublist 에 가까워지거나 이동되어 진다. 새로운 page 가 추가될때 이 두개의 sublist 사이로 추가되며..
InnoDB Locking and Transaction Model MySQL lock global lock MySQL 서버 전체에 걸리는 잠금으로 보통 mysqldump 등에서 백업을 위해 사용한다. FLUSH TABLES WITH READ LOCK; 위 구문은 실행과 동시에 데이터베이스에 구분없이 서버 전체를 대상으로 잠금이 획득된다. table lock 개별 테이블 단위로 설정하는 장금이다. FLUSH TABLES WITH READ LOCK; 명시적 잠금은 아래와 같이 구문으로 명시적으로 잠금을 획득할 수 있다. LOCK TABLES table_name [READ | WRITE]; UNLOCK TABLES; 묵시적 잠금은 MyISAM 혹은 MEMORY 스토리지 엔진 등에서 데이터를 변경할때 테이블 단위 잠금을 지원하므로 자동으로 획득후 해제를 하게 된다. user ..
MySQL shell importTable() 사용하기 filelist=" T1.csv T2.csv " HOST=127.0.0.1 PASSWD=pass DATABASE=test USER=root THREADS=4 file_path=/home/chlee/data CMD="$HOME/mysqlsh/bin/mysqlsh -h $HOST -u$USER -p$PASSWD --mysql" function importAll() { for filename in `ls $filelist` do importTable $file_path/$filename done } function importTable() { if [ -f "$1" ]; then basename=$(basename -- $1) filename=${basename%.*} echo "import $filename..
MySQL shell exportTable() 사용하기 tablelist=" T1 T2 " file_path=/home/chlee/data mysqlsh_path=$HOME/mysqlsh/bin HOST=127.0.0.1 PASSWD=pass DATABASE=test USER=root CMD="$mysqlsh_path/mysqlsh -h $HOST -u$USER -p$PASSWD --mysql" function exportAll() { for table in $tablelist do exportTable ${table%.*} done } function exportTable() { table=$1 echo "export $table" time $CMD -e "util.exportTable('${DATABASE}.$table' , 'file://$file_pa..
MySQL 쿼리로 csv 데이터 추출하기 tablelist=" T1 T2 T3 " HOST=127.0.0.1 PASSWD=pass DATABASE=test CMD="mysql -h$HOST -uroot -p$PASSWD $DATABASE -sN -e " map[T1]="'BTC','ETH'" map[T2]="'BTC2','ETH2'" map[T3]="'BTC3','ETH3'" START_TIME="unix_timestamp( '2021-09-27' )" END_TIME="unix_timestamp( '2021-09-29' )" function exportDiffData() { set -f SQL="SELECT * FROM $1 where $START_TIME
ubuntu 20.04 한영 한자 키 등록하기 xev 에서 키 인식 시키기 한영키 값을 확인하기 위해 xev 를 실행했지만 키를 아에 인식하지 못하는 경우가 있다. 이때 setkeycodes 로 등록을 해야 xev 에서 인식이 된다. setkeycodes 에 사용된 값을 키보드 마다 다를 수 있기 때문에 설정이후 xev 를 통해 원하는 값을 설정되었는지 확인한다. (base) chlee@chlee-desktop:~ $ sudo setkeycodes 72 122 (base) chlee@chlee-desktop:~ $ sudo setkeycodes 71 123 xev 로 등록된 키값 확인 KeyRelease event, serial 37, synthetic NO, window 0x3800001, root 0x405, subw 0x0, time 45298..