/etc/my.cnf 설정은 정해진게없다. 사용함에따라 유동성있게 설정을 변경해주자


# Example mysql config file for very large systems.
#
# This is for large system with memory of 1G-2G where the system runs mainly
# MySQL.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /data) or
# ~/.my.cnf to set user-specific options.
#
# One can in this file use all long options that the program supports.
# If you want to know which options a program support, run the program
# with --help option.
 
#       my-small.cnf   64m
#       my-medium.cnf  128m ~ 256m
#       my-large.cnf   512m
#       my-huge.cnf    1~2G
 
 
# The following options will be passed to all MySQL clients
[client]
#password      = your_password
#       mysql 기본 포트번호
port           = 3306 
#       소켓 경로
socket         = /tmp/mysql.sock
 
 

--------------------------------------------------------------------------------
# Here follows entries for some specific programs
 
# The MySQL server
[mysqld]
#       서버데몬 포트번호
port           = 3306
#       서버데몬 소켓경로
socket         = /tmp/mysql.sock
#       락 걸지 않음
skip-locking
#      
 

--------------------------------------------------------------------------------

# key_buffer :
# 인덱스를 위한 버퍼크기, 키 버퍼의 크기는 공유된쓰레드의 크기이며 중복된 키를 자주
# 사용할 경우 속도를 높일 수 있고, 기준은 show status 명령을 했을 때
# Key_blocks_used를 체크해서 key_buffer 사이즈를 줄이던가 늘리던가 해야 한다.
# 일반적인 key_buffer 의 크기는 Key_blocks_used*1024 로 잡으면 된다.
# Key_reads 가 크다면, key_buffer_size 변수가 너무 작은 것이다.
# 대용량 테이블일 경우 쿼리가 느리다면, 인덱스 버퍼 크기가 작아서 느릴 수 있으므로
# key_buffer 크기를 늘려 주어야 한다.
# show status 명령에서 다음과 같이 계산되는 것이 key_buffer 설정이 적당한 것이다.
# Key_reads/Key_read_request < 0.01   [ 0.00112318293327 ]
# key_write/key_write_request = 1     [ 0.0763101585936 ]
# | Key_blocks_used          | 360325     |  > 368972800
# | Key_read_requests        | 386263882  |
# | Key_reads                | 433845     |
# | Key_write_requests       | 5685285    |
key_buffer = 384M
 
# max_allowed_packet :
# 클라이언트 통신에 대해 사용되는 버퍼가 커질수 있는 최대 크기, 이변수의 가장 큰 값은
# MySQL 4 이전은 16MB 가 될 수 있고 MySQL 4와 그 이후는 1GB까지 될 수 있다.
# 클라이언트가 커다란 BLOB나 TEXT값들을 전송하는 경우라면, 이 서버 변수를 늘릴
# 필요가 있고 클라이언트 측에서도 이것을 늘려야 할 것이다.
# shell>mysql --set-variable=max_allowed_packet=64M
max_allowed_packet = 1M
 
# table_cache :
# MySQL 서버가 한번에 열수 있는 테이블의 개수 설정,
# 기본값은 64개이다, Opened_tables 값이 크다면 table_cache 값이 너무 작은 것이다.
# max_connections 값과도 관계가 있는데, 만약 100이라면 table_cache는 100*n 으로
# 설정해 주는것이 좋다.
# n은 조인해서 열수 있는 최대 테이블 개수이다.
# ex ) 사용중인 테이블이 20개이고, max_connections=100이라면, table_cache 는 그의
# 5~6배인 table_cache=512 정도로 설정하는 것이 좋다.
table_cache = 512
 
# sort_buffer_size , read_buffer_size :
# 정렬을 위해 사용하는 버퍼 크기, ORDER BY 나 GROUP BY 절을 빠르게 하기 위해서는
# 이 값을 증가시킨다.
# 4.0.3 이전에서는
# sort_buffer_size => sort_buffer
# read_buffer_size => record_buffer
# 라는 변수로 쓰였다.
# max_used_connections에 따라서 증가시키는 것이 좋다. 한번에 많은 쓰레드가 동시에
# 붙을 경우는 증가시키는 것이 좋다. max_used_connections가 높을 경우
# sort_buffer=6M 정도로 설정하는 것이 좋고, record_buffer=2M 정도가 적당하다.
# sort_buffer와 record_buffer 를 합쳐서 8M를 넘지 않는 것이 좋다.
# (sort_buffer+record_buffer)*max_connections를 할 경우 ram을 다 차지할 수 있기
# 때문이다.
 
# 많은 연속적인 테이블 스캔이 이루어진다면 read_buffer_size 값을 증가시켜야 한다.
sort_buffer_size = 2M
read_buffer_size = 2M
 
# myisam_sort_buffer_size :
# MyISAM 테이블 타입에서 인덱스를 만들거나(create table ..), 인덱스로
# 변경(alter table ...) 하거나, 복구( repair ...) 할 때 사용하는 버퍼크기
myisam_sort_buffer_size = 64M
 
thread_cache = 8
 
# 쿼리 캐시 버퍼 사이즈
query_cache_size = 32M
 
# Try number of CPU's*2 for thread_concurrency
# thread_concurrency : 솔라리스에서만 사용된다.
thread_concurrency = 8
 
# max_connections :
# show status 명령을 했을때 , max_used_connections을 보고 늘리던가, 줄이던가 해야 한다.
# 최대값보다 10% 정도 더 크게 잡는 것이 좋다.
max_connections=1000
 
# max_connect_error :
# 서버가 차단되기 전에 최대 연결 오류수
max_connect_error=10000
 
# max_delayed_threads : INSERT DELAYED 쿼리를 사용할 수 있는 최대 쓰레드 수
max_delayed_threads=1000
 
# tmp_table_size = 디스크에 쓰여진 후 임시 테이블의 최대 크기
tmp_table_size=64M
 
# key_buffer_size :
# 인덱스를 위한 버퍼 사이즈,  느리다면 크기를 늘리는 것이 좋으나
# OS의 Ram 크기를 고려하여 늘려야 한다. 인덱스 데이터 캐싱을 위한
# 메모리 제한이 key_buffer 이다.
# 인덱스 기반의 검색과 정렬은 이 변수의 값을 늘리면 인덱스들을 만들거나 수정하는
# 동작만큼 더 빨라진다. 키 퍼버가 클수록 MySQL이 메모리 안에서 키를 찾을 확률이
# 늘어나는데 그만큼 인덱스 처리에 필요한 디스크 접근 횟수를 줄여주게 된다.
# 3.23 버전 이전에는 key_buffer 로 불렸다. 3.23부터 두 이름 모두 인식한다.
key_buffer_size=369M
key_buffer =369M
 

--------------------------------------------------------------------------------

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
 
# Replication Master Server (default)
# binary logging is required for replication
 
# log-bin :
# 리플리케이션을 설정할때 활성화 시키는 곳?
# mysql 이 log-bin을 이용한다는 것을 알려준다.
log-bin
 
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
 
# server-id :
# 리플리케이션 설정을 위해. id를 부여해 준다.
# slave 의 경우 .. 2 ~ .... 중복불가!
server-id      = 1
 
# binlog-do-db :
# 특정데이터베이스만 리플리케이션 기능을 사용할 수 있게 하는 옵션이다.
# 서버부담이 클수도 있으므로 인증 부분이 걸린 곳에 사용하면 좋을 것이다.
binlog-do-db   = V2PRJ
 
# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR   
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin
 
# Point the following paths to different dedicated disks
#tmpdir        = /tmp/       
#log-update    = /path-to-dedicated-directory/hostname
 
# Uncomment the following if you are using BDB tables
#bdb_cache_size = 384M
#bdb_max_lock = 100000
 
#skip-innodb
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /data/
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
#innodb_log_group_home_dir = /data/
#innodb_log_arch_dir = /data/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 384M
#innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 100M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
 
[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
 
[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeou

참조 - http://cdral.tistory.com/518

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

MySQL에서 Create Procedure 설명  (0) 2010.12.21
MySQL에서 Create Procedure  (0) 2010.12.21
MySQL Data Type 과 테이블 설계 방법  (0) 2010.12.20
MySQL 외부 접속 사용자 추가  (0) 2010.12.19
mysql 사용자 관리  (0) 2010.12.19
Posted by linuxism
,

MySQL Data Type 과 테이블 설계 방법


MySQL Data Type 대해서 알아보도록 하겠습니다. ^^ (언제부턴가 강좌를 쓰는 기분으로 포스팅을 하네요 ^^ )

데이터 타입 
MySQL 은 다양한 데이터 타입을 제공합니다. 아래 표를 보시면 데이터 형 , 범위 그리고 데이터 크기를 보실 수 있습니다. 데이터 타입은 실제 입력하는 데이터 형에 맞추어서 최소한의 크기로 잡아 주어야 합니다. 아래 표를 보시면 데이터 형과 그 값의 범위 그리고 크기에 대해서 보실 수 있습니다

MySQL에서 지원하는 데이터 형(MySQL DataTypes)

형태

데이터형

범위

크기

숫자형

TINYINT

-128 ~ 128 , 0 ~ 255

1 Byte

SMALLINT

-32768 ~ 32767 , 0 ~ 65535

2 Byte

MEDIUMINT

-8388608 ~ 8388607, 0 ~ 16777215

3 Byte

INT, INTEGER

-2147483648 ~ 2147483647, 0 ~ 4294967295

4 Byte

BIGINT

-9223372036854775808 ~ 9223372036854775807
0 ~ 18446744073709551615

8 Byte

FLOAT

-3.402823466E+38 ~ -1.175494351E-38
1.175494351E-38 ~ 3.402823466E+38

4 Byte

DOUBLE [PRECISION], REAL

1.7976931348623157E+308 ~ -2.2250738585072014E-308
0 ~ 2.2250738585072014E-308

8 Byte

DECIMAL(M,D), NUMERIC(M,D)

데이터 베이스 설정 및 시스템에 따라 다름

가변적 크기

날자형

DATE

'1000-01-01' ~ '9999-12-31'

3 Byte

TIME

'-838:59:59' ~ '838:59:59'

3 Byte

DATETIME

'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'

8 Byte

TIMESTAMP

'1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'

4 Byte

YEAR

1901 ~ 2155

1 Byte

문자()

CHAR(M)

1~ 255 개의 문자

M <= 255 Byte

BINARY(M)

1 ~ 255 개의 문자

M Byte

VARCHAR(M), VARBINARY(M)

1 ~ 255 개의 문자

M Byte

TINYBLOB, TINYTEXT

최대 2^8

입력된 길이 만큼

BLOB, TEXT

최대 2^16

입력된 길이 만큼

MEDIUMBLOB, MEDIUMTEXT

최대 2^24

입력된 길이 만큼

LONGBLOB, LONGTEXT

최대 2^32

입력된 길이 만큼

ENUM

최대 65525

1 ~ 2 Byte

SET

최대 64 개의 셋

1 ~ 8 Byte

테이블을 설계 시에 데이터에 맞는 데이터 를 선정해주는것이 매우 중요합니다. 물론 큰 데이터 형으로 잡아도 문제는 없지만 데이터의 효율성에서 많은 성능 저하가 있을 수 있습니다

예를 들어 현재 학교 학생수를 다루는 테이블이 있다고 가정합시다. (졸업, 입학 예정, 기타 학생은 제외 시킨 재학중인 학생) 학생들이 많아야 최대 65535 명은 안되고 255명은 넘을 것입니다. 그럼 PRIMARY KEY로 잡을 키 값은 SMALLINT 형의 데이터 형으로 해야 합니다

또 한가지 예를 들면 커뮤니티 포털 사이트의 회원이라고 생각을 해봅시다 (국내 회원만 받을, 중복, 탈퇴 기타 예외 비 포함) 그러면 전국민이 가입해도 5천만명입니다. 그럼 어떤 데이터 형이 맞을 까요? INT형으로 잡습니다

위 예처럼 데이터에 가장 효율적인 방법으로 데이터 형을 설정해야 합니다

NULL 을 최대한 배제 합니다. 테이블 설계시 NOT NULL 이 아닌 NULL을 허용하게 되면 해당 필드가 NULL 인지를 구분할수 있게 하는 플래그를 위한 공간이 따로 필요하고 , 데이터를 제어 할때 NULL인지를 한번더 확인하게 됩니다. (NULL ""는 다릅니다.)

ROW_FORMAT 이 가변적인 것 보다는 FIXED 인것이 좋습니다. 최대한 기준이 되는 테이블일 경우에는 FIXED 로 사용하고 그외 가변적인 요소 (TEXT, BLOB, VARCHAR)등은 따로 테이블을 떼어 놓으세요. 성능이 많이 향상됩니다information_schema 데이터 베이스의 TABLES 테이블에서 확인 할 수 있습니다

MySQL PRIMARY KEY AUTO_INCREMENT 에 최적화 되어 있습니다. 최대한 AUTO_INCREMENT를 사용하여 효율적으로 PRIMARY KEY를 사용하세요

모든 데이터 설계는 정규화 후 설계를 하세요 MySQL Workbench 를 이용하면 정규화 작업에 많이 도움이 됩니다.(머리 속에 있는것 보다는 눈으로 보고 그려보는게 좋겠죠~) 데이터 설계는 도식화 한 후에 항상 재 검토 하세요~ 안보이는것도 보일 수 있습니다

무리하게 인덱스를 사용하지 마세요 . WHERE 에 쓰인다고 해서 모든것을 인덱스 할 필요는 없습니다. 최대한 필요하고 가장 간단하게 범위를 잡아서 사용을 하세요, 무리한 인덱스는 전체적인 INSERT / UPDATE 성능을 떨어 뜨릴 수 있습니다. ANALYZE TABLE OPTIMIZE TABLE 로 주기적으로 데이터 단편화를 제거해주세요. 2개 이상의 조건이 필수적으로 검색에 이용이 된다면 복합 인덱스를 사용하세요 . 두 개의 필드가 인덱스가 따로 따로 잡혀 있는것 보다 더욱 빠르게 결과를 보여줍니다

효율적인 테이블 설계 방법 요약 
1. 저장할 데이터에 맞게 최대한 작은 데이터 타입을 사용해야 합니다
2. 컬럼에서 DEFAULT NULL을 최대한 허용하지 마세요
3. 가변적인 데이터타입 보다 고정형의 데이터 타입을 선택하세요
4. PRIMARY KEY는 작은 데이터형으로 잡습니다. (AUTO_INCREMENT 최대한 사용)
5. 모든 데이터는 정규화를 꼭 해야 합니다. (정규화방법 참조)
6. 인덱스는 필요한 경우만 사용합니다. 

전체적인 테이블 설계에 대한 요약이었습니다. 테이블을 설계 할때 데이터 형에 알 맞는 형태의 데이터 형을 선택을 해서 효율적으로 설계를 해보세요 ^^

 

참조 - http://www.lovelgw.com/Blog/211

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

MySQL에서 Create Procedure  (0) 2010.12.21
리눅스에서 my.cnf 설정  (0) 2010.12.21
MySQL 외부 접속 사용자 추가  (0) 2010.12.19
mysql 사용자 관리  (0) 2010.12.19
mysql 명령어  (0) 2010.12.19
Posted by linuxism
,

SQL의 기원

DB/Common 2010. 12. 20. 22:32
SQL의 기원
1970년 관계형 데이터베이스 모델 발표(E.F. Codd)
1974~75년 IBM 산타레사 연구소에서 관계형 데이터베이스의 최소 프로토타입 완성
1974년 SEQUEL(Structured English Query Language) 개발
1977년 Relational Software의 Oracle
1981년 IBM의 SQL/Data System
1983년 IBM, SQL/DS 발표
1985년 IBM, DB2 발표

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

TABLE의 key  (0) 2012.01.09
데이터베이스 언어(DBL; DataBase Language)  (0) 2012.01.03
Table, Field, Record 관계  (0) 2011.12.20
SQL 설명  (0) 2010.12.20
SQL - DDL, DML, DCL  (0) 2010.12.20
Posted by linuxism
,