show processlist 에 where 조건 사용하기

mysql 2018.12.19 13:05


SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time > 10 and info is not null;


how to customize `show processlist` in mysql? 2009.05.30

http://stackoverflow.com/questions/929612/how-to-customize-show-processlist-in-mysql


Chapter 23 The INFORMATION_SCHEMA PROCESSLIST Table

https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.1/en/processlist-table.html


'mysql' 카테고리의 다른 글

복제 Replication  (0) 2018.12.19
show processlist 에 where 조건 사용하기  (0) 2018.12.19
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0

샤딩 sharding

mysql 2018.12.19 08:20


데이터베이스 샤딩 sharding


- 파티셔닝과 달리 별도의 샤드를 구축, 샤딩 플랫폼(스파이더)를 통해 구현

- 쓰기 성능이 지속적으로 향상됨

- Spider 기반 샤딩 구축


수직(Verical) 샤딩

- 샤드를 만들어 저장할 때 구분 기준을 연령/성별과 같은 기준으로 나눠 구성

- 테이블 단위로 분할


수평(Horizontal) 샤딩

- 동일한 시스템을 지역/국가별로 나눠서 구성하는 경우

- 동일한 테이블을 여러 개로 분할


범위(range) a-m /n-r / s-z

해시(hash) 해시함수 파티션별로 크기를 비슷하게 나눔

리스트(list) 특정한 컬럼을 기준

컴포지트(composite) range-hash/range-list


mariadb 다운로드

docker pull mariadb:10.1


스파이더 인스턴스 실행

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=spider mariadb:10.1


접속

docker exec -it spider bash


테스트인스턴스 실행

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name=sample1 mariadb:10.1

docker run -d -e MYSQL_ROOT_PASSWORD=sample --name-sample2 mariadb:10.1


실행 인스턴스 확인

docker ps -a


테스트인스턴스 접속

docker exec -it sample1 bash

docker exec -it sample2 bash


IP주소 확인

docker inspect spider | grep "IPAddress"

docker inspect sample1 | grep "IPAddress"

docker inspect sample2 | grep "IPAddress"


docker exec -it spider bash

docker exec -it sample1 bash

docker exec -it sample2 bash


cd /user/share/mysql


스파이더 설치

mysql -u root < /usr/share/mysql/install_spider.sql


스파이더 엔진 설치확인

show engines;


https://mariadb.com/kb/en/mariadb/spider-storage-engine-overview/

http://yakolla.tistory.com/69


spider sample1,2 에 사용자추가 및 권한 할당

use mysql;

create user 'spider-test'@'%' identified by 'sample';

grant all on *.* to 'spider-test'@'%' with grant option;

flush privileges;


샤딩 플렛폼에 서버정보 등록하기

create server sample1

 foreign data wrapper mysql

options(

 host '172.17.0.x',

 database 'sampleDB',

 user 'spider-test',

 password 'sample',

 port 3306

);


create server sample2

 foreign data wrapper mysql

options(

 host '172.17.0.x',

 database 'sampleDB',

 user 'spider-test',

 password 'sample',

 port 3306

);


서버정보 확인하기

select * from mysql.servers;


spider 에 table 생성

create database sampleDB;

user sampleDB;

create table shardingTest(id int not null auto_increment, name varchar(255) not null, address varchar(255) not null, primary key(id) engine=spider comment='wrapper "mysql", talbe "shardingTest"' partition by key(id) (partition sample1 comment = 'srv "sample1"', partition sample2 comment = 'srv "sample2"' );


sample1,2 에 talbe 생성

create database sampleDB;

user sampleDB;

create table shardingTest

(

 id int not null auto_increment,

 name varchar(255) not null, 

 address varchar(255) not null,

 primary key(id)

);


spider 접속 후 

user sampleDB;

insert into shardingTest(name, address) values ('kim', 'seoul');

insert into shardingTest(name, address) values ('lee', 'seoul');

insert into shardingTest(name, address) values ('park', 'seoul');

insert into shardingTest(name, address) values ('kim', 'busan');

insert into shardingTest(name, address) values ('lee', 'daegu');

insert into shardingTest(name, address) values ('park', 'jeju');


select * from shardingTest;


sample1,2에서도 각각 확인


select * from shardingTest;



VLDB Very Large DBMS


Sharding

- DBMS 내용 분할 (DB/테이블)

- Write 성능 향상


Replication

- 동일한 DBMS를 여러 개 유지(마스터/슬레이브)

- Read 성능 향상


'mysql' 카테고리의 다른 글

복제 Replication  (0) 2018.12.19
show processlist 에 where 조건 사용하기  (0) 2018.12.19
샤딩 sharding  (0) 2018.12.19
트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel  (0) 2018.12.18
파티셔닝 Partitioning  (0) 2018.12.17
Azure Linux VM에서 MySQL 성능 최적화  (0) 2016.06.16
Trackbacks 0 : Comments 0

트랜잭션 Transcation, 락 Lock, 격리수준 IsolationLevel

mysql 2018.12.18 14:39


--


Transcation


select @@autocommit;


set autocommit = false;


create database sampleDB;


create table BusinessCard(Name varchar(255), Address varchar(255), Telephone varchar(255));


insert into BusinessCard values ('Bob', 'Seocho-dong 123', '123-4567');


commit;


rollback;


--


Lock


select engine, support from information_schema.engines where support='DEFAULT';


set default_storage_engine = InnoDb;

set default_storage_engine = MyISAM;


select engine from information_schema.tables where table_name = 'city' and table_schema='world';


alter table 'city' engine = InnoDB;


--


Isolation level


select @@tx_isolation;


set tx_isolation = 'READ-COMMITED';


commit;


--


트랜잭션의 격리수준 Transcation IsolationLevel


ACID ( Atomicity / Consistency / Isolation / Durability )

- 원자성 Atomicity : All or Nothing, Commit / Rollback

- 일관성 Consistency : 트랜잭션 전후에 데이터가 손상을 받으면 안됨, 같은 데이터가 다른 값을 가지면 안됨

- 고립성/격리수준 Isolation : 여러 개의 트랜잭션이 수행될 때 성능과 데이터 안정성간의 trade-off

- 지속성 Durability : 트랜잭션이 종료된 이후에도 데이터에 문제가 없어야 됨


Read Uncommitted

- 트랜잭션이 종료되지 않는 상태의 대상 데이터를 읽어가는 것

- 트랜잭션이 처리되는 도중에 다른 트랜잭션이 해당 데이터를 읽기를 허용 ( uncommitted date )

- 트랜잭션이 종료되면 데이터 값이 변경 될 수 있음

- 예를 들면 개표가 진행 중인 득표 현황으로 현재 값을 참고하지만 최종 값은 변경 될 수 있음

- 성능은 높지만 데이터의 안정성이 떨어짐


Read Committed

- 트랜잭션이 종료 된 상태의 데이터만 읽는 것 ( committed data )

- 오라클이나 일반적인 DBMS 의 기본 격리수준

- 현재 트랜잭션이 진행되면서 데이터를 참고할 때 다른 트랜잭션에서는 작업이 종료된 데이터만을 읽는 다는 것

- 이 경우 트랜잭션에서 동일한 쿼리는 여러 번 수행시킬 때 쿼리 값이 달라지는 경우가 생길 수 있음

- 이 경우를 해결해 주는 것이 Repeatable Read


Repeatable Read

- 트랜잭션이 진행되는 도중에는 쿼리를 반복 수행하더라도 결과 값은 계속 동일

- 즉, 데이터가 캐싱/버퍼링 됨

- DB 백업 시간이 오래 걸릴 경우 백업이 진행되는 도중에는 데이터가 수정되어도 백업 시작 시점의 데이터를 백업하도록 함

- 다른 트랜잭션이 업데이트하는 것은 금지하지만 레코드 추가하는 것은 허용하는 방식

- MariaDB 의 기본 격리 수준


Serializable

- 트랜잭션끼리 겹치는 일이 발생하지 않음

- 트랜잭션이 동시에 수행되는 것이 금지되고 순차적으로 수행됨

- 대신 성능이 가장 낮음, 안정성은 높음


CAP ( Consistency / Availability / Partition Tolerance )







Trackbacks 0 : Comments 0