ラベル Mysql kr の投稿を表示しています。 すべての投稿を表示
ラベル Mysql kr の投稿を表示しています。 すべての投稿を表示

2017年4月15日土曜日

REPEATABLE READ란 무엇인가?

Transaction 분리 레벨에 REPEATABLE READ라고 있습니다.
REPEATABLE READ은, 같은 Transaction안에서는 반듯이 같은 값을 가지고 온다는 설정입니다.
MySQL은 REPEATABLE READ을 Default로 하고 있습니다.
REPEATABLE READ가 어떻게 동작하는지 알아보도록 하겠습니다.


왼쪽을 트랜잭션 t1이라고 하겠습니다.

오른쪽을 트랜잭션 t2라고 하겠습니다.
t1과 t2에 서로 begin을 하겠습니다. 그리고 t1에서 insert하고 commit를 하고, t2에서 확인을 해보겠습니다. 샐행 시간을 잘봐 주세요.
t2에서 begin을 하고 select " from test;를 해도 t1에서 입력한 값이 보이질 않습니다.t2 begin을 commit하고 나서 select를 하면 t1에서 입력한 값이 보입니다.
update도 같은 트랜젝션에서는 같은 값이 보입니다.
일괄성읽기 전용이라고 할수 있습니다. 이것을 REPEATABLE READ라고 하는 것입니다.

PostgreSQL가 Oracle은 READ COMMITTED을 사용하고 있어서 서로다른 트랜젝션에서 commit를 하게 되면 다른 트랜젝션에서도 참조가 됩니다.
왜, MySQL은 REPEATABLE READ을 Default로 사용하는지 그렇다면 어디서 이것을 쓰는지 알수 있을 까요?
저도 왜?MySQL이 REPEATABLE READ을 Default로 사용하는지는 모름니다만, 어디에 사용해야하는지는 알고 있어 설명을 드리도록 하겠습니다.
예) 트랜젝션(t1)에서는 시간 테이블에 1초에 하나씩 테이터를 Insert합니다.
     시간 테이블을 보고 8시 정각에 실행되는 스케줄이 5개 있다고 합시다.
     트랜젝션(t2)에서는 1건씩 보면서 처리는 하는데 처리시간이 1초 건린다고 하면
     이 처리는 1건만 끝나고, 다음 처리는 1초가 지났으므로 처리가 안될 것입니다.
    이럴때, 사용하는 것이 REPEATABLE READ입니다.
    t2에서 commit만 하지 않는다면 5건이 끝날때까지 t2에서 읽는 시간은 8시이기 때문에 전부 처리가 가능합니다.

어떤 시스템을 만들때 사양을 잘 이해하고, 트랜젝션에 대해서도 이해를 하고 있다면 정말로 훌륭한 시스템을 만들수 있다고 생각합니다. 아키텍쳐, 모델러 등은 반듯이 각 시스템의 특성을 알고 설계를 하시면 좋겠습니다.

이상입니다.

2017年4月11日火曜日

MySQL에 DBLINK만들기

Server version: 10.1.21-MariaDB MariaDB Server을 기준으로 합니다.

DBLink를 만들 database를 작성합니다.
MariaDB [mysql]> create database parkdb;

parkdb에 Zabbix에 있는 table을 dblink하겠습니다.
engines을 먼저 확인합니다.
MariaDB [mysql]> show engines;
+--------------------+---------+-
| Engine             | Support |
+--------------------+---------+-
| MRG_MyISAM         | YES     |
| CSV                | YES     |
| Aria               | YES     |
| MyISAM             | YES     |
| MEMORY             | YES     |
| InnoDB             | DEFAULT |
| SEQUENCE           | YES     |
| PERFORMANCE_SCHEMA | YES     |
+--------------------+---------+-
8 rows in set (0.00 sec)

MariaDB [mysql]>

FEDERATED은 Default설정이 되어 있지 않으므로 인스톨 합니다.

①FEDERATED 인스톨

MariaDB [mysql]> install plugin federated soname 'ha_federated.so';
Query OK, 0 rows affected (0.03 sec)
MariaDB [mysql]> show engines;
+--------------------+---------+
| Engine             | Support |
+--------------------+---------+
| MRG_MyISAM         | YES     |
| CSV                | YES     |
| Aria               | YES     |
| MyISAM             | YES     |
| MEMORY             | YES     |
| InnoDB             | DEFAULT |
| SEQUENCE           | YES     |
| FEDERATED          | YES     |
| PERFORMANCE_SCHEMA | YES     |
+--------------------+---------+
9 rows in set (0.00 sec)

②DBLink작성

MariaDB [mysql]> CREATE SERVER dblink
    -> FOREIGN DATA WRAPPER mysql
    -> OPTIONS (USER 'zabbix', PASSWORD 'zabbix' , HOST '127.0.0.1', PORT 3306, DATABASE 'zabbix');
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> 

Database zabbix에 접속할수 있는 유져를 등록합니다.

③dblink대상이 될 TABLE을 작성합니다.

[root@localhost ~]# mysql -uzabbix zabbix -pzabbix
MariaDB [zabbix]> CREATE TABLE test_table (
    ->     id     INT(20) NOT NULL AUTO_INCREMENT,
    ->     name   VARCHAR(32) NOT NULL DEFAULT '',
    ->     other  INT(20) NOT NULL DEFAULT '0',
    ->     PRIMARY KEY  (id),
    ->     INDEX name (name),
    ->     INDEX other_key (other)
    -> );
Query OK, 0 rows affected (0.04 sec)

④DBLink Table을 작성합니다.

[root@localhost ~]# mysql -uzabbix parkdb -pzabbix
MariaDB [parkdb]> CREATE TABLE test_table (
    ->     id     INT(20) NOT NULL AUTO_INCREMENT,
    ->     name   VARCHAR(32) NOT NULL DEFAULT '',
    ->     other  INT(20) NOT NULL DEFAULT '0',
    ->     PRIMARY KEY  (id),
    ->     INDEX name (name),
    ->     INDEX other_key (other)
    -> )
    -> ENGINE=FEDERATED
    -> DEFAULT CHARSET=utf8
    -> CONNECTION='dblink/test_table';
Query OK, 0 rows affected (0.00 sec)

MariaDB [parkdb]> 
    -> CONNECTION='dblink/test_table';부분을 주의 해 주시길 바랍니다.
  ②번에 DBLINK작성에 등록한 이름으로 table을 생성합니다.

⑤확인

Zabbix DATABASE에 Insert합니다.
MariaDB [zabbix]> insert into test_table values (1,'park',0);
Query OK, 1 row affected (0.01 sec)

MariaDB [zabbix]> 

parkd DATABASE에서 select합니다.
MariaDB [parkdb]> select * from test_table;
+----+------+-------+
| id | name | other |
+----+------+-------+
|  1 | park |     0 |
+----+------+-------+
1 row in set (0.01 sec)
parkd DATABASE에 Insert힙니다.
MariaDB [parkdb]> insert into test_table values (2,'uri',0);
Query OK, 1 row affected (0.00 sec)

MariaDB [parkdb]> 

Zabbix DATABASE에서 Select합니다.
MariaDB [zabbix]> select * from test_table;
+----+------+-------+
| id | name | other |
+----+------+-------+
|  1 | park |     0 |
|  2 | uri  |     0 |
+----+------+-------+
2 rows in set (0.00 sec)

MariaDB [zabbix]> 


이상입니다.

2017年3月2日木曜日

MySQL ODBC Install Error

「Error 1918.Error installing ODBC driver MySQL ODBC 5.3 ANSI Driver, ODBC error 13:
  MySQL ODBC 5.3 ANSI Driver ODBC 드라이버의 설치 루틴을 시스템 오류 코드 126 때문에 로드하지 못했습니다.
  지정된 모듈을 찾을 수 없습니다. (C:\Program Files\MySQL\Connector ODBC 5.3\myodbc5S.dll)..」

「Error 1918. Error installing ODBC driver MySQL ODBC
 5.3 ANSI Driver, ODBC error 13: The setup routines for
 the MySQL ODBC 5.3 ANSI Driver ODBC driver could
 not be loaded due to system error code 126: The
 specified module could not be found. ...\myodbc5S.dll...」

Microsoft Visual C++ 2013  이것이 부족하여 일어나는 에러입니다.
https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation-binary-windows-installer.html
참조 바랍니다.
Microsoft Visual C++ 2013을 인스톨 하시고 나서
mysql-connector-odbc-5.3.7-winx64을 인스톨 하시면 별 문제 없이
인스톨 되리라 생각됩니다.