mysql

Edit

mysql server에 외부접근을 허용하고자 할 때

10.4.4. The ENUM Type

MySQL Replication

SELECT LAST_INSERT_ID()

10.2. Numeric Types

http://dev.mysql.com/downloads/gui-tools/5.0.html

날짜형식

DATE_FORMAT(now(),'%Y%m%d%H%i%s')

형식변환

http://blog.paran.com/sputnik/1022191

MySQL 쿼리 실시간 모니터링 및 저장하기

프랜드피드는 어떻게 MySQL을 사용해서 스키마 없는 데이터를 저장하나" 요약

Update

http://dev.mysql.com/doc/refman/5.0/en/update.html

[]

GUI tool

http://dev.mysql.com/downloads/gui-tools/5.0.html

날짜

DAYOFWEEK(date)

1 = Sunday, 2 = Monday, 7 = Saturday

select DAYOFWEEK('2007-01-05');

select DAYOFWEEK(now());

cast(ymd as date)

DATE_FORMAT(date_add(cast(gijun_ymd as date), interval 2-dayofweek(gijun_ymd) day), '%Y%m%d' )

http://jeongsam.net/112

Index

show index from tb_fund_chart_weekly

alter table 테이블명 add index 인덱스명 (칼럼명);

CREATE INDEX <인덱스명> ON <테이블명> ( 칼럼명1, 칼럼명2, …​ );

Cache

http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.htmlhttp://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.html\[http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.html]

http://planet.mysql.com/entry/?id=26207

mysql jdbc

socketTimeout=60000&connectTimeout=60000

Innodb vs Myisam

http://dev.kthcorp.com/2011/06/17/why-we-need-to-use-innodb-on-mysql-vs-myisam-comparison/

Meta table

select * from mysql.userselect * from mysql.dbselect version()select * from mysql.general_logshow variables like 'log_output'

replication delay

http://www.mysqlperformanceblog.com/2011/07/29/reasons-for-mysql-replication-lag/

load data infile

options

http://dev.mysql.com/doc/refman/5.1/en/load-data.htmlhttp://dev.mysql.com/doc/refman/5.1/en/mysqlimport.html\[http://dev.mysql.com/doc/refman/5.1/en/mysqlimport.html]

performance

: 옵션 조정해서 비교하는 사례

http://www.mysqlperformanceblog.com/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/ : perl script이용 chunk 사이즈 조정http://chrisjohnson.blogsite.org/php-and-mysql-data-import-performance/\[http://chrisjohnson.blogsite.org/php-and-mysql-data-import-performance/] : Php에서 load data in file의 성능비교 insert 성능 : http://dev.mysql.com/doc/refman/5.1/en/insert-speed.htmlhttp://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/\[http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/] insert delayed : (myisam에서만 가능)

JDBC에 속성포함 예제

jdbc:mysql://127.0.0.1/test?logger=com.mysql.jdbc.log.Slf4JLogger&logSlowQueries=true&slowQueryThresholdMillis=1500&dumpQueriesOnException=true&explainSlowQueries=true&connectTimeout=1000&socketTimeout=2000

Column not found 에러 :

http://stackoverflow.com/questions/18730805/mysql-select-statement-with-alias-fails-with-column-not-found

?useOldAliasMetadataBehavior=true

http://forums.mysql.com/read.php?39,424792,424792

http://forums.mysql.com/read.php?39,424792,430313#msg-430313

아래는 제공된 Markdown 문서를 Asciidoc 형식으로 변환한 내용입니다.

AsciiDoc

대용량데이터 처리를 위한 MySQL 최적화

"useServerPrepStmt=true" 옵션

쓰기 성능 높이기 ( rewriteBatchedStatements=true 옵션)

대용량 데이터 조회를 위한 옵션 파라미터

디폴트옵션들로는 MySQL에서는 JdbcCursorItemReader를 써도 OOM 날 수도 있음. 이를 위한 방법은 디폴트 옵션일때 사용되는 클라이언트사이드 커서는 모든 결과를 다 다운로드함. 이를 해결하기 위해 ResultSet Streaming, 서버 커서 사용할수 있음.

ResultSet Streaming

많은 건의 데이터를 한번에 받지 않고 Streaming으로 흘러보내면서 받는 방법 아래와 같이 Statement를 만들어야함.

PrepaedStatement statement = con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(Integer.MIN_VALUE);

'setFetchSize(Integer.MIN_VALUE)'은 JDBC규약과도 어긋남. java.sql.Statement의 javadoc에는 setFetchSize로 지정되는 값은 0보다 작으면 SQLException을 던진다고 적혀 있다.

스프링 배치에서도 JdbcCursorItemReader.setFetchSize(Integer.MIN_VALUE) 로 지정하면 쿼리 결과를 한번에 다운로드 받지 않고 Streaming방식으로 가져감.

return new JdbcCursorItemReaderBuilder<T>()
    .dataSource(this.dataSource)
    .sql(sql)
    .rowMapper(rowMapper)
    .fetchSize(Integer.MIN_VALUE)
    .verifyCursorPosition(false);

ResultSet.TYPE_FORWARD_ONLY 옵션은 JdbcCursorItemReader 에 이미 위의 Statement 생성시의 반영되어 있음.

verifyCursorPosition을 default값인 true로 둘 경우 아래와 같은 에러가 발생함

peration not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.; nested exception is java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.

서버 커서