'SQL/MySQL'에 해당되는 글 2건

  1. 2018.02.01 MySQL Connection 문제
  2. 2015.12.28 MySQL 데이터타입

DB Connection Pool 사용 중 가끔 데이터베이스 커넥션이 끊기는 현상 발생.


[오류로그 일부]

[org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was62250 seconds ago.The last packet sent successfully to the server was 62250 seconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.] 


해당 문제를 해결하기 위해서 'wait_timeout' 시간을 늘리거나 'autoReconnect=true' 설정을 사용하라는 문구가 보인다.


[wait_timeout]

- wait_timeout으로 설정된 시간이 초과되면 커넥션을 종료시키는 옵션이다.

- 옵션의 시간을 무한정 늘릴 수 없기 때문에 근본적인 해결책으로 보기 어렵다.


[autoReconnect=true]

- 해당 옵션은 쿼리 수행 다음 DB 세션에 문제가 있으면 단순히 SQLException을 리턴한 다음 재접속을 시도한다.

- 만약 트랜잭션 구동 환경이라면 수행중이던 작업은 롤백처리되어야 하고, 남은 작업들은 수행되지 말아야 하는데 해당 옵션은 이러한 작업을 처리하지 않는다.

- 따라서 해당 옵션 사용시 트랜잭션에 대한 처리를 따로 해주어야 한다는 문제가 있다.


==> 위와 같은 문제로 다른 파해법을 찾아 보니 validationQuery 라는 것을 찾게 되었다.


[validationQuery]

- 커넥션의 유효성을 검사하는 옵션

- 해당 옵션은 단순 검증을 위한 옵션이기 때문에 자원 소비를 최소화 하기 위해 아래와 같은 Query를 사용하도록 권장한다.

오라클 : SELECT 1 FROM DUAL

MSSQL : SELECT 1

MySQL : SELECT 1

CUBRID : SELECT 1 FROM DB_ROOT

- 설정

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

    <property name="driverClassName" value="${Globals.DriverClassName}" />

    <property name="url" value="${Globals.Url}" />

    <property name="username" value="${Globals.UserName}"/>

    <property name="password" value="${Globals.Password}"/>

    <property name="defaultAutoCommit" value="true"/>

    <property name="validationQuery" value="select 1"/>

    <property name="testWhileIdle" value="true"/>

    <property name="timeBetweenEvictionRunsMillis" value="7200000"/>

</bean> 


[참고]

http://uip80.tistory.com/entry/24%EC%8B%9C%EA%B0%84-%EB%8F%99%EC%95%88-connection-%EC%98%A4%EB%A5%98-mysql

http://kshmc.tistory.com/entry/MyBatis-Datasource-%EC%B0%B8%EA%B3%A0

http://www.mybatis.org/mybatis-3/ko/configuration.html

http://d2.naver.com/helloworld/5102792

'SQL > MySQL' 카테고리의 다른 글

MySQL 데이터타입  (0) 2015.12.28
Posted by OnewayK
,

MySQL 데이터타입

SQL/MySQL 2015. 12. 28. 15:47

MySQL의 데이터 타입

[CHAR 데이터 타입]

CHAR와 VARCHAR는 모두 텍스트 문자열을 허용하고 필드의 크기를 제한한다. 두 타입의 차이점은 CHAR는 문자열의 크기가 한번 정해지면 정해진 크기보다 적은 크기의 문자열이 입력하더라도 해당 문자열의 크기를 유지한다는 것(공백으로 채워짐)이고, VARCHAR는 정해진 크기보다 적은 크기의 문자열을 입력하면 그에 맞게 가변적으로 크기를 갖게 된다. 하지만, VARCHAR는 각 값의 크기를 추적할 수 있는 약간의 오버헤드가 필요하기 때문에 모든 데이터의 크기가 비슷하다면, CHAR가 효율적이다.


TYPE

BYTE 

Exam 

CHAR(n) 

n Byte(최대 255 Byte) 

CHAR(5) 'Hello' : 5 Byte

CHAR(10) 'Hello' : 10 Byte 

VARCHAR(n) 

최대 n Byte(최대 65535 Byte)

VARCHAR(5) 'Hello' : 5 Byte

VARCHAR(10) 'Hello' : 5 Byte 


[BINARY 데이터 타입]

BINARY 데이터 타입은 


  BINARY 데이터 타입 

BINARY 데이터 타입은 관련된 문자 세트가 없는 문자의 전체 바이트를 저장하는데 사용된다. 예를 들면 GIF 이미지를 저장하는데 사용할 수 있다. 


TYPE  

사용되는 바이트 

예제 

BINARY(n) 혹은 BYTE(n) 

정확히 n (<=255) 

CHAR이지만 바이너리 데이터를 가짐 

 VARBINARY(n)

최대 n 까지(<=65535) 

VARCHAR이지만 바이너리 데이터를 가짐



  TEXT와 VARCHAR 데이터 타입

TEXT와 VARCHAR에는 작은 차이점이 있다. 


TEXT 필드는 기본 값을 가질 수 없다. 

MySQL은 TEXT 열의 처음 n 개의 문자만 인덱싱 할 수 있다. 


이것은, 만약 전체 내용을 검색할 때는 VARCHAR이 더 알맞고, 빠르다는 것이다.


 TYPE

사용되는 바이트 

속성 

 TINYTEXT(n)

최대 n (<=255)

문자열로 취급

 TEXT(n)

최대 n (<=65535)

문자열로 취급

 MEDIUMTEXT(n)

최대 n (<=16777215)

문자열로 취급

 LONGTEXT(n)

최대 n (<=4294967295)

문자열로 취급



  BLOB 데이터 타입

BLOB(Binary Large OBject)는 65535 바이트를 넘는 바이너리 데이터에 유용하며, 기본 값을 가질 수 없다. 


 TYPE

사용되는 바이트 

속성 

TINYBLOB(n)

최대 n (<=255)

바이너리 데이터로 취급

 BLOB(n)

최대 n (<=65535)

바이너리 데이터로 취급

 MEDIUMBLOB(n)

최대 n (<=16777215)

바이너리 데이터로 취급

 LONGBLOB(n)

최대 n (<=4294967295)

바이너리 데이터로 취급



  숫자형 데이터 타입


 TYPE

사용되는 바이트 

최소 값

(signed/unsigned) 

대 값

(signed/unsigned) 

TINYINT

-128

127
255 

SMALLINT 

-32768

32767
65535 

MEDIUMINT

-8388608

8388607
16777215 

INT or INTEGER

-2147483648

2147483647
4294967295 

BIGINT

-9223372036854775808

9223372036854775807

18446744073709551615

FLOAT

-3.40E+45
(no unsigned) 

3.40E+45

(no unsigned) 

DUBLE or REAL

-1.7976E+320
(no unsigned)   

1.7976E+320
(no unsigned)   




'SQL > MySQL' 카테고리의 다른 글

MySQL Connection 문제  (0) 2018.02.01
Posted by OnewayK
,