MYSQL: 74개의 글
쿼리 실행 구조 쿼리 실행구조는 기능별로 다음과 같이 나눠질 수 있습니다. 1) 파서파서는 사용자 요청으로 들어온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만들어 내는 작업을 의미합니다. 쿼리 문장의 문법 오류는 이 과정에서 발견되어 사용자에게 오류 메시지를 전달하게 됩니다. 2) 전처리기파서 과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에 구조적인 문제점이 있는지 확인합니다. 각 토큰을 테이블 이름이나 컬럼 이름 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근 권한 등을 확인하는 과정을 이 단계에서 수행합니다. 실제 존재하지 않거나 권한상 사용할 수 없는 개체의 토큰은 이 단계에서 걸러집니다. 3) 옵티마이저옵..
MySQL의 전체 구조 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분해서 볼 수 있습니다. 위 그림에서는 MySQL의 쿼리 파서나 옵티마이저 등과 같은 기능을 스토리지 엔진과 구분하고자 "MySQL 엔진"과 "스토리지 엔진"으로 구분했습니다. 그리고 "MySQL 엔진"과 "스토리지 엔진"을 모두 합쳐서 MySQL 또는 MySQL 서버라고 표현합니다. 위는 오라클 전체 구조 입니다. MySQL, Oracle 구조에는 상당한 차이가 있습니다. 실제 기능상에는 큰 차이가 없음에도 이런 차이가 발생하는 이유는 MySQL 구조내 "Pluggable Storage Engine" 때문입니다. MySQL은 내부적으로 성격이 다른 아키텍처 구조를 여러개 포함하고 있습니다. 오라클의 경우 테이블의 데이터..
MySQL 쓰면서 하지 말아야 할 것 17가지 ( https://blog.lael.be/post/370 ) 1. 작게 생각하기 (MySQL ecosystem, 캐싱 사용, 확장 가능한 아키텍처, 복제/파티셔닝 고려) 2. EXPLAIN 실행계획 안보기 3. 잘못된 데이터 타입 선택 4. 스토리지 엔진 이해없이 사용 (단일 엔진으로 전체 아키텍처를 결정했다면 대부분 최적이 아님 / 엔진별 장단점 공부 필수) 5. 인덱스 레이아웃 이해없이 사용 6. 쿼리 캐시에 대한 이해없이 사용 7. Stored Procedure를 무분별한 사용 (다른 RDBMS와 다르게 connection thread에서 실행 계획이 세워짐 - ETL 타입 프로시저 - 아주아주 복잡하지만 자주 실행되지 않는 것 - 한번 요청할 때마다 ..
1. 스토어드 프로그램이란?MySQL에서는 절차적인 처리를 위해 스토어드 프로그램을 이용할 수 있습니다. 스토어드 프로그램은 스토어드 루틴이라고도 하는데, 스토어드 프로시저와 스토어드 함수 그리고 트리거와 이벤트 등을 모두 아우르는 명칭입니다. 스토어드 프로그램 가운데 스토어드 프로시저나 함수는 MySQL 5.0부터 추가된 기능이며, 스케줄러는 MySQL 5.1부터 추가된 기능입니다. 그럼 스토어드 프로그램(프로시저, 함수, 트리거)의 장점과 단점을 살펴보도록 하겠습니다. 1-1. 스토어드 프로그램의 장점- 데이터베이스의 보안 향상MySQL의 스토어드 프로그램은 자체적인 보안 설정 기능을 가지고 있으며, 스토어드 프로그램 단위로 실행 권한을 부여할 수 있습니다. 이러한 보안 기능을 조합해서 특정 테이블의..
MySQL의 파티션은 5.1 버전부터 도입됐지만 아직은 많은 제약을 지니고 있습니다. 물론 MySQL 5.5 버전에서 해결된 문제도 있지만 아직 MySQL의 파티션은 모두에게 익숙하지 않으므로 자세한 제약사항을 한번 살펴보겠습니다. - 숫자값(INTEGER 타입 컬럼 또는 INTEGER 타입을 반환하는 함수 및 표현식)에 의해서만 파티션이 가능합니다. MySQL 5.5 부터는 숫자 타입뿐 아니라 문자열이나 날짜 타입 모두 사용할 수 있도록 개선되었습니다. - 키 파티션은 해시 함수를 MySQL이 직접 선택하기 때문에 컬럼 타입 제한이 없습니다. - 최대 1024개의 파티션을 가질 수 있습니다. (서브 파티션까지 포함) - 스토어드 루틴이나 UDF 그리고 사용자 변수 등을 파티션 함수나 식에 사용할 수 없..
파티션이란 MySQL 서버의 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션 입니다. 일반적으로 DBMS의 파티션은 하나의 서버에서 테이블을 분산하는 것이며, 원격 서버 간에 분산을 지원하는 것은 아닙니다. MySQL 5.1부터 제공되는 파티션 기능은 MyISAM과 InnoDB 테이블 등 대부분의 스토리지 엔진에서 사용할 수 있습니다. 파티션 방법은 1. 해시 2. 리스트 3. 키 4. 레인지 총 네가지가 존재합니다. 이외에 서브 파티셔닝 기능까지 사용할 수 있습니다. MySQL 파티션이 적용된 테이블에서 INSERT나 SELECT 등과 가은 쿼리가 어떻게 실행되는지 이해한다면 파티션을 어떻게 사용하는 것이 가장 최..
Fetch Time -페치 된 결과를 전송하는 데 걸리는 시간을 측정하며, 이는 쿼리 실행과 관련이 없습니다. 페치 시간은 네트워크 연결에 의존하기 때문에 SQL 쿼리 디버깅/최적화 옵션으로 고려하지 않을 것입니다. 네트워크 연결 자체는 쿼리 최적화와 관련이 없습니다. 페치 시간에 병목 현상이 발생하면 네트워킹 문제가있을 가능성이 큽니다. 참고 : 가져 오기 시간은 각 쿼리 실행에 따라 다를 수 있습니다. Duration time -쿼리를 실행해야하는 시간입니다. SQL 쿼리의 성능을 최적화 할 때 최소화해야합니다.
■ mysqldump 사용하는 방법 전체 데이터베이스 또는 특정 데이터베이스를 백업하거나 특정테이블만 백업 할 수 있다. ▷ 전체 데이터베이스 백업 - 서버의 전체 데이터베이스를 alldatabase.sql로 백업한다. mysqldump -uroot -p -A > alldatabase.sql ▷ 특정 데이터베이스 백업 - test 데이터베이스만 백업한다. mysqldump -uroot -p test > testdb.sql ▷ 특정 테이블만 백업 - test 데이터베이스의 board 테이블만 백업 한다. mysqldump -uroot -p test board > testdbboard.sql ※ 특정 데이타베이스의 테이블생성(schema) 정보만 백업하는 방법 mysqldump -uroot -p --no-d..
환경 : Windows7 + Mysql5.5(Innodb) ------------------------------------------------------------------ Step4. Create a User for Replication GRANT ALL PRIVILEGES ON *.* TO 'assetrepl'@'MYSQL_SVR1_IP' IDENTIFIED BY PASSWORD '*B59E756B80B88541E7DAD5E9BE8DB018E9AA93E1' WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO 'assetrepl'@'%' IDENTIFIED BY PASSWORD '*B59E756B80B88541E7DAD5E9BE8DB018E9AA93E1' WIT..