'IT/DB'에 해당되는 글 50건

  1. 2012/04/18 high-performance MySQL tuning script
  2. 2012/02/14 MSSQL inet_ntoa, inet_aton (1)
  3. 2012/01/04 오라클 트리거
  4. 2011/04/14 TOAD 단축키
  5. 2010/12/24 mysql 날짜지정 자동업데이트 컬럼
  6. 2010/12/23 mysql "Incorrect information in file: './database/table.frm'"
  7. 2010/12/17 mysql talbe stauts 정보
  8. 2010/12/09 mysql 프로시저 insert into GeoLiteCityBlock
  9. 2010/12/01 리눅스 모델링툴
  10. 2010/11/22 과거자료를 포기못해 자료이전을 고집하는 지금

high-performance MySQL tuning script

우분투 소프트웨어 센터 : high-performance MySQL tuning Script

MySQL 서버?의 건강의 스냅샷을 제공합니다 Perl로 작성 고성능 MySQL의 튜닝 스크립트.

수집된 통계를 바탕으로 구체적인 권장 사항은 MySQL의 서버의 효율성과 성능을 향상시킬 것이다 제공됩니다. 

스크립트는 MySQL DBA수준의 의 튜닝을 제공합니다.

기능 :

메모리 사용률 : 최대 부하에서 MySQL의 메모리 사용량을 계산하고 MySQL의 메모리 사용량을 증가 또는 감소에 대한 권장 사항을 만듭니다. 당 스레드 및 서버 전체 버퍼 데이터는 서버?의 구성의 정확한 스냅샷을 위해 별도로 계산됩니다.

느린 검색어 : 리뷰 전체 쿼리에 상대적으로 느린 쿼리의 금액입니다. 슬로우 쿼리 시간 제한도 분석하고 권장 사항이 만들어집니다.

연결 :현재 및 역사적 접속 카운트를 검토하고 있습니다.

키 버퍼 : 구성 데이터를 탔고, MyISAM 테이블에있는 실제 인덱스에 비교합니다. 키 캐시의 히트 율이 계산되고 변수 조정은 제안한다.

쿼리 캐시 : 쿼리 캐시의 히트 율 및 사용 비율은 쿼리 캐시 구성 변수에 대한 의견서를 제출하게하는 데 사용됩니다.

정렬 과 조인: 정렬에 영향을 미칠 및 조인 당 스레드 버퍼는 서버에 대해 실행 쿼리의 통계와 함께 검토를 거치게됩니다.

임시 테이블 : 가변 권장 사항이 디스크에 기록되는 임시 테​​이블을 줄이기 위해 만들어진다.

테이블 캐시 : 현재 열려있는 테이블로 열린 전체 테이블을 비교합니다. 제안하기 위해 테이블​​ 캐시 히트 율을 계산합니다.

파일 열기 : 서버가 접근하거나 운영 체제 또는 MySQL 서버 자체 설정 파일 열기 한도로 실행하는 경우 결정합니다.

테이블 잠금 : 쿼리 기다려야 강제하고 대기를 필요로 잠금을 줄이기위한 제안을 만들어 테이블 잠금을 찾습니다.

스레드 캐시 : MySQL은 쿼리에 응답하는 새 스레드를 생성해야 횟수를 계산합니다.

중단 연결 : 정상적으로 MySQL에 접속을 폐쇄하지 않는 응용 프로그램을 검색합니다.

비율 읽기 / 쓰기 :의 비율이 당신의 MySQL의 설치에 대한 작업을 읽고 쓸 계산합니다.



'IT > DB' 카테고리의 다른 글

high-performance MySQL tuning script  (0) 2012/04/18
MSSQL inet_ntoa, inet_aton  (1) 2012/02/14
오라클 트리거  (0) 2012/01/04
TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
트랙백 0 댓글 0개가 달렸습니다.

MSSQL inet_ntoa, inet_aton

'IT > DB' 카테고리의 다른 글

high-performance MySQL tuning script  (0) 2012/04/18
MSSQL inet_ntoa, inet_aton  (1) 2012/02/14
오라클 트리거  (0) 2012/01/04
TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
트랙백 0 댓글 1개가 달렸습니다.

오라클 트리거

저작자 표시 비영리 동일 조건 변경 허락

'IT > DB' 카테고리의 다른 글

high-performance MySQL tuning script  (0) 2012/04/18
MSSQL inet_ntoa, inet_aton  (1) 2012/02/14
오라클 트리거  (0) 2012/01/04
TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
트랙백 0 댓글 0개가 달렸습니다.

TOAD 단축키

침고 : Toad Oracle 설명

테이블 정보 상세보기
F4 : Table, View, Proc, Funct, Package를 DESC(테이블명 위에 커서를 두고 F4키)
 
자동완성
Ctrl+. : Table Completion (매칭되는 테이블목록 출력)
Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)
 
SQL문 실행
F5 : SQL Editor내의 모든 SQL문 실행
Ctrl+Enter : 현재 커서의 SQL문 실행
F9 : SQL문 실행 후 Grid에 출력
 
히스토리(과거 수행SQL문 조회)
F8 : 과거에 실행한SQL문 HISTORY 목록
Alt+Up : History UP
Alt+Down : History DOWN
 
텍스트 대/소문자 변환
CTRL+L : 텍스트를 소문자로
CTRL+U : 텍스트를 대문자로
 
주석처리
Ctrl+B : 주석처리
Ctrl+Shift+B : 주석해제
 
편집 창 전환(이동)
F6 : SQL Editor와 결과창간의 이동
F2 : SQL Editor창 전체화면 전환
Shift+F2 : Grid Output창 전체화면 전환
 
기타 단축키
F7 : 화면을 모두 CLEAR
Ctrl+Shift+F : 쿼리문을 보기좋게 정렬
Ctrl+F9 : SQL문 Validate (SQL문을 수행하지 않음)

'IT > DB' 카테고리의 다른 글

MSSQL inet_ntoa, inet_aton  (1) 2012/02/14
오라클 트리거  (0) 2012/01/04
TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
mysql talbe stauts 정보  (0) 2010/12/17
트랙백 0 댓글 0개가 달렸습니다.

mysql 날짜지정 자동업데이트 컬럼

참고

TIMESTAMP 데이터 형을 사용할 경우에는
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 속성을 분명히 명시하던가
아니면 DEFAULT '0000-00-00 00:00:00' 라고 값을 명시해야 안 헷갈린다는 것이다.

 

'IT > DB' 카테고리의 다른 글

오라클 트리거  (0) 2012/01/04
TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
mysql talbe stauts 정보  (0) 2010/12/17
mysql 프로시저 insert into GeoLiteCityBlock  (0) 2010/12/09
트랙백 0 댓글 0개가 달렸습니다.

mysql "Incorrect information in file: './database/table.frm'"

참고

http://www.scotthodson.com/blog/index.php/restoring-mysql-databases-without-a-mysqldump-backup/

원리는 다음과 같다.

MySQL에서 innoDB는 기본적으로 ibdata1 에 데이터를 저장하며, ib_logfileX 에 로그를 저장한다.

위와 같은 에러가 나는 경우는 MySQL Engine에서 새로운 설정 파라미터로 예전 로그들을 읽으려고 하면 발생하는 것이다.

따라서, 정상적으로 MySQL을 Restart한 경우 (로그 파일에 별 내용이 없을 경우로 가정하고,)

그냥 로그파일을 삭제하고, MySQL을 재시작하면 된다.

위의 방법으로 문제는 해결되었고, MySQL도 새로 설정된 파라미터로 잘 돌아가고 있는 것 같다.


위 내용으로 logfile을 삭제했지만 오류는 그대로나옴.


하지만 DB table을 확인했을때의 허탈함이란.  DB의 테이블 목록만 뜨고 모든 정보가 날아간것 같다. ㅜ.ㅜ

frm 파일 정보와 ibdata1 파일은 정상적으로 존재한다. 뭔가 잘못된거다. 다시 구글링을 해야겠다. 에궁.

'IT > DB' 카테고리의 다른 글

TOAD 단축키  (0) 2011/04/14
mysql 날짜지정 자동업데이트 컬럼  (0) 2010/12/24
mysql "Incorrect information in file: './database/table.frm'"  (0) 2010/12/23
mysql talbe stauts 정보  (0) 2010/12/17
mysql 프로시저 insert into GeoLiteCityBlock  (0) 2010/12/09
리눅스 모델링툴  (0) 2010/12/01
트랙백 0 댓글 0개가 달렸습니다.

mysql talbe stauts 정보

참고

 SHOW TABLE STATUS 는 다음 필드를 리턴한다:

  • Name

테이블 이름

  • Engine

테이블의 스토리지 엔진. "14. 스토리지 엔진과 테이블 타입"장을 참조하라.

  • Version

테이블의 .frm 파일의 버전 수.

  • Row_format

로우 스토리지 포맷(Fixed, Dynamic, Compressed, Redundant, Compact).
MySQL/InnoDB 5.0.3
부터 InnoDB 테이블의 포맷은 Redundant 
또는 Compact 형식으로 보고된다. 5.0.3이전 버전에서 InnoDB 테이블은
항상
Redundant 포맷에 있었다.  

  • Rows

로우의 수. MyISAM과 같은 몇몇 스토리지 엔진은 정확한 값을 저장한다.
InnoDB
와 같은 다른 스토리지 엔진의 경우, 이 값은 근사값이며, 실제 값과는 
40~50%
이상 차이가 있다. 그런 경우, 정확한 값을 얻기 위해서
SELECT COUNT(*)
를 사용한다. INFORMATION_SCHEMA 데이터 베이스에 있는 테이블에서 Rows 
값은 NULL 이다.

  • Avg_row_length

평균 로우 길이.

  • Data_length

데이터 파일의 길이.

  • Max_data_length

데이터 파일의 최대 길이. 이것은 테이블에 저장된 데이터의 바이트 총수이다.

  • Index_length

인덱스 파일의 길이.

  • Data_free

할당되었으나 사용되지 않은 바이트 수.

  • Auto_increment

그 다음 AUTO_INCREMENT .

  • Create_time

테이블이 생성되었을 때.

  • Update_time

데이터 파일이 마지막으로 업데이트된 때. 몇몇 스토리지 엔진의 경우, 이 값은 NULL
이다.예를 들어, InnoDB는 테이블스페이스에 있는 복합 테이블을 저장하고 데이터
파일 타임스탬프는 적용되지 않는다.

  • Check_time

테이블이 마지막으로 체크된 때. 모든 스토리지 엔진이 이 시간에 업데이트되는 것은
아니다. 이런 경우 값은 항상 NULL이다.

  • Collation

테이블의 캐릭터 셋과 정렬.

  • Checksum

유요한 검사 합계 값.

  • Create_options

CREATE TABLE 을 사용한 별도 옵션.

  • Comment

테이블을 생성할 때 사용하는 코멘트
(또는 MySQL이 테이블 정보에 엑세스할 수 없는 이유에 관한 정보)

 
트랙백 0 댓글 0개가 달렸습니다.

mysql 프로시저 insert into GeoLiteCityBlock

참고

테이블 정보
[code sql]
-- 지역 IP 대역 정보 CREATE TABLE `GeoLiteCityBlocks` ( `startIPNum` int(10) unsigned NOT NULL, `endIPNum` int(10) unsigned NOT NULL, `locID` int(10) unsigned NOT NULL, PRIMARY KEY (`startIPNum`,`endIPNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='지역IP대역 '$$ -- 지역정보 CREATE TABLE `GeoLiteCityLocation` ( `locID` int(10) unsigned NOT NULL, `country` char(2) default NULL, `region` char(2) default NULL, `city` varchar(45) default NULL, `postalCode` char(7) default NULL, `latitude` double default NULL, `longitude` double default NULL, `dmaCode` char(3) default NULL, `areaCode` char(3) default NULL, PRIMARY KEY (`locID`), KEY `idx_GeoLiteCity-Location` (`country`,`region`,`city`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='지역정보 '$$ -- IP별 지역 연결정보 CREATE TABLE `GeoLiteCityBlock` ( `addr` int(10) unsigned NOT NULL, `locID` int(10) unsigned NOT NULL, PRIMARY KEY (`addr`), KEY `idx_GeoListCityBlock` (`locID`), KEY `fk_GeoLiteCityBlock:locID` (`locID`), CONSTRAINT `fk_GeoLiteCityBlock:locID` FOREIGN KEY (`locID`) REFERENCES `GeoLiteCityLocation` (`locID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8$$ [/code]

IP별 지역정보를 연결한 자료를 테이블에 밀어넣기
[code sql]
DELIMITER $$ CREATE DEFINER=`pickup`@`` PROCEDURE `geo`() BEGIN DECLARE cur_state INT DEFAULT 0; DECLARE startIPNum INT DEFAULT 0; DECLARE endIPNum INT DEFAULT 0; DECLARE locID INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT * FROM sta.GeoLiteCityBlocks WHERE startIPNum >= (SELECT if(count(addr)=0, 0, addr) as startIPNum FROM sta.GeoLiteCityBlock ORDER BY addr DESC LIMIT 1) ORDER BY startIPNum ASC LIMIT 1000; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cur_state = 1; OPEN cur; REPEAT FETCH cur INTO startIPNum, endIPNum, locID; IF NOT cur_state THEN WHILE startIPNum <= endIPNum DO INSERT INTO sta.GeoLiteCityBlock VALUES (startIPNum, locID); SET startIPNum = startIPNum+1; END WHILE; END IF; UNTIL cur_state END REPEAT; CLOSE cur; END[/code]

[code sql] -- 프로시저 실행 call geo(); [/code]

하나의 IP 주소에대한 지역정보를 찾을 경우에는 MaxMind 에서 제공하는 쿼리로 문제없이 동작한다.
[code sql]
SELECT ip_country FROM geoip WHERE 404232216 >= begin_ip_num AND 404232216 <= end_ip_num LIMIT 1 [/code]

하지만 IP Row 수가 100단위 이상 넘어갈 경우 쿼리 결과는 수십초를 넘은 실행시간을 잡아 먹는 관계로 결국은 IP와 locID간의 1:1 조건을 만족시키고 join으로 0.00x 대의 쿼리 실행시간을 위해서 GeoLiteCityBlock 테이블을 구성하고 IP:locID 정보를 밀어넣는 프로시저를 만들고 자료를 밀어 넣게 되었습니다.

하지만 쓸데없는 Table 아닐까하는 생각도 드네요.


결국은 현재 통계에 쌓여있는 IP와 Geo 자료 매핑테이블을 만들기로 했습니다.
이렇게밖에 할 수 없는 이유는 INT(4 byte)로 addr과 locID 2개의 필드에 최소 16777216 에서 최대 3758095359까지의 자료를 넣을 경우 2개 필드 평균 4 byte 의 저장공간을 확보한다해도 (3,758,095,359 - 16,777,216)*4 = 14,965,272,572 byte (약 14Gbyte ) 의 자료공간을 차지하게 됩니다. 거기에 인덱스 자료까지 생각한다면 공간낭비라 생각되는군요.

거기에다 16777216 ~ 3758095359 까지 INT형으로 PK 자료만 넣는데도 엄청난 시간이 소유되는군요. 약 25백만건의 자료를 프로시저로 addr과 locID 필드 자료를 넣는데 만 하루 이상이 소요되었습니다.

이걸 한방에 빠르게 해결할 수 있는 방법이 없을까 생각해 봤지만... 아직 저에겐 무리군요.. ^^;;

[code sql]
DELIMITER $$ CREATE DEFINER=`pickup`@`` PROCEDURE `geo`() BEGIN DECLARE cur_state INT DEFAULT 0; DECLARE addr INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT su.addr FROM sta.sta_uri AS su WHERE su.addr NOT IN (SELECT addr FROM sta.GeoLiteCityBlock) ORDER BY su.addr; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET cur_state = 1; OPEN cur; REPEAT FETCH cur INTO addr; IF NOT cur_state THEN INSERT INTO sta.GeoLiteCityBlock SELECT addr, `locID` FROM sta.GeoLiteCityBlocks WHERE addr BETWEEN startIPNum AND endIPNum LIMIT 1 ON DUPLICATE KEY UPDATE locID=VALUES(locID); END IF; UNTIL cur_state END REPEAT; CLOSE cur; END [/code]

결국 위 프로시저는 아래 쿼리 한번으로 해결되는건데...
[code sql]
INSERT INTO sta.GeoLiteCityBlock SELECT su.addr, geob.locID FROM sta.sta_uri AS su LEFT JOIN sta.GeoLiteCityBlocks AS geob ON su.addr BETWEEN geob.startIPNum AND geob.endIPNum WHERE su.addr NOT IN (SELECT addr FROM sta.GeoLiteCityBlock) GROUP BY su.addr [/code]
트랙백 0 댓글 0개가 달렸습니다.

리눅스 모델링툴

참고

  1. DIA 도표편집 프로그램

    dia Screenshots - Dia is free software/open source general-purpose ...

    이미지출처 : ostatic.com

  2. Google - wwwsqldesigner - Project Hosting on Google Code
    IanLewis / django-wwwsqldesigner / wiki / Home – Bitbucket

    이미지출처 : bitbucket.org


  3. Oracle - sqlDeveloper

    SQL Developer Main Window - Jan Borchers - SQL Developer is a is a ...

    이미지출처 : pcwin.com

  4. MySQL - MySQL Workbench 5.2
    MySQL Workbench - MySQL Forge Wiki

    이미지출처 : forge.mysql.com


  5. starUML - http://staruml.sourceforge.net/en/ , StarUML 5.0 개발자 가이드

    Survey of Open Source Modeling Tools for Software Development | Wazi

    이미지출처 : olex.openlogic.com



개발중인 서비스는 mysql을 사용하고 있어서 workbench를 애용하고 있습니다. 하지만 workbench 의 기능과 약간의 버그들이 모델링에서 나의 발걸음을 막는군요.
트랙백 0 댓글 0개가 달렸습니다.

과거자료를 포기못해 자료이전을 고집하는 지금

현재 통계자료를 이전하고 있다.

새로운 모델을 제시하려고 하지만 원래 DB모델링에 전문가도 아니니 이게 맞다 저게 맞다고 확신할 수도 없다.

어떻게 해야 할까?

현재 작업중이 새로운 모델은 과거의 자료를 포기하지 못한 결과물이다.

하지만 지인분의 얘기를 듣고는 아하! 돌을 깨우쳤다. 왜? 과거자료에 연연을 할까? 새로운 방식으로 옮겨가고 과거자료는 과자자료대로 보여주든지 아니면 버리면 될것을...
하지만 벌써 50%나 지나갔는데...

일정부분 취할건 취하고 버릴건 버린다면 좀더 편하지 않을까? 생각해본다.
트랙백 0 댓글 0개가 달렸습니다.
prev 1 2 3 4 5 next