Archive

Archive for the ‘数据库’ Category

Open_tables &table_open_cache

July 5th, 2011

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 1 |
+—————+——-+
1 row in set (0.00 sec)

mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 1 |
+——————+——-+
1 row in set (0.00 sec)

mysql>
mysql>
mysql>
mysql>
mysql> set global table_open_cache=3;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 3 |
+——————+——-+
1 row in set (0.00 sec)

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 1 |
+—————+——-+
1 row in set (0.00 sec)

mysql> select * from t1,t2,t3 ;
Empty set (0.00 sec)

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 3 |
+—————+——-+
1 row in set (0.00 sec)

mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 3 |
+——————+——-+
1 row in set (0.00 sec)

mysql> select * from t4;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 3 | 3 |
| 2 | 2 | 3 |
+—-+——+——+
2 rows in set (0.01 sec)

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 3 |
+—————+——-+
1 row in set (0.00 sec)

mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 3 |
+——————+——-+
1 row in set (0.00 sec)

mysql> set global table_open_cache=1 ;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 1 |
+——————+——-+
1 row in set (0.00 sec)

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 3 |
+—————+——-+
1 row in set (0.00 sec)

mysql> select * from t5;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 3 | 3 |
| 2 | 2 | 3 |
+—-+——+——+
2 rows in set (0.00 sec)

mysql> show status like ‘Open_tables’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Open_tables | 1 |
+—————+——-+
1 row in set (0.00 sec)

mysql> show variables like ‘table_open_cache’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| table_open_cache | 1 |
+——————+——-+
1 row in set (0.00 sec)

mysql>

数据库

ERROR 1030 (HY000): Got error 28 from storage engine

May 24th, 2011

[root@dbatest1 ~]# mysql -uroot -pabc123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5268
Server version: 5.1.50-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> use information_schema
Database changed

mysql> desc TABLES
-> ;
ERROR 1030 (HY000): Got error 28 from storage engine
mysql>
mysql>
[root@dbatest1 tmp]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
131G 124G 0 100% /
/dev/sda1 99M 11M 83M 12% /boot
tmpfs 1014M 622M 392M 62% /dev/shm
/dev/sdb3 7.4G 5.5G 1.5G 79% /u03
[root@dbatest1 tmp]#

[root@dbatest1 tmp]# mysql -uroot -pabc123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5269
Server version: 5.1.50-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> show variables like ‘%dir%’ ;
+—————————————–+—————————————-+
| Variable_name | Value |
+—————————————–+—————————————-+
| basedir | /usr/local/mysql/ |
| binlog_direct_non_transactional_updates | OFF |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
| datadir | /mysql/data/ |
| innodb_data_home_dir | /mysql/ibdata |
| innodb_log_group_home_dir | /mysql/log |
| innodb_max_dirty_pages_pct | 90 |
| plugin_dir | /usr/local/mysql/lib/mysql/plugin |
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+—————————————–+—————————————-+
10 rows in set (0.00 sec)

AUTHOR
[root@dbatest1 tmp]# mv rda /u03
[root@dbatest1 tmp]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
136805368 129708824 35040 100% /
/dev/sda1 101086 10906 84961 12% /boot
tmpfs 1037772 636780 400992 62% /dev/shm
/dev/sdb3 7700700 5790880 1518640 80% /u03

[root@dbatest1 tmp]# mysql -uroot -pabc123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5270
Server version: 5.1.50-log Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> use information_schema;
Database changed
mysql> desc TABLES;
+—————–+———————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+—————–+———————+——+—–+———+——-+
| TABLE_CATALOG | varchar(512) | YES | | NULL | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| TABLE_TYPE | varchar(64) | NO | | | |
| ENGINE | varchar(64) | YES | | NULL | |
| VERSION | bigint(21) unsigned | YES | | NULL | |
| ROW_FORMAT | varchar(10) | YES | | NULL | |
| TABLE_ROWS | bigint(21) unsigned | YES | | NULL | |
| AVG_ROW_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES | | NULL | |
| INDEX_LENGTH | bigint(21) unsigned | YES | | NULL | |
| DATA_FREE | bigint(21) unsigned | YES | | NULL | |
| AUTO_INCREMENT | bigint(21) unsigned | YES | | NULL | |
| CREATE_TIME | datetime | YES | | NULL | |
| UPDATE_TIME | datetime | YES | | NULL | |
| CHECK_TIME | datetime | YES | | NULL | |
| TABLE_COLLATION | varchar(32) | YES | | NULL | |
| CHECKSUM | bigint(21) unsigned | YES | | NULL | |
| CREATE_OPTIONS | varchar(255) | YES | | NULL | |
| TABLE_COMMENT | varchar(80) | NO | | | |
+—————–+———————+——+—–+———+——-+
21 rows in set (0.00 sec)

数据库

On duplicate key update

February 28th, 2011

mysql> create table t1(f1 int,f2 int,f3 int) ;
Query OK, 0 rows affected (0.05 sec)

mysql> desc t1;
+——-+———+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+———+——+—–+———+——-+
| f1 | int(11) | YES | | NULL | |
| f2 | int(11) | YES | | NULL | |
| f3 | int(11) | YES | | NULL | |
+——-+———+——+—–+———+——-+
3 rows in set (0.00 sec)

mysql>
mysql> alter table t1 add constraint pk_f1 primary key(f1) ;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0

m
mysql>
mysql> insert into t1 values(1,2,3) ;
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 values(1,2,3) ;
ERROR 1062 (23000): Duplicate entry ’1′ for key ‘PRIMARY’
mysql>
mysql>
mysql>
mysql> select * from t1;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 2 | 3 |
+—-+——+——+
1 row in set (0.10 sec)

mysql>
mysql> insert into t1 values(1,2,3)
-> on duplicate key update f3=f3+1 ;
Query OK, 2 rows affected (0.01 sec)

mysql> select * from t1;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 2 | 4 |
+—-+——+——+
1 row in set (0.00 sec)

mysql>
mysql> insert into t1 values(1,2,3) on duplicate key update f3=f3-1,f2=f2+1 ;
Query OK, 2 rows affected (0.01 sec)

mysql> select * from t1;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 3 | 3 |
+—-+——+——+
1 row in set (0.00 sec)

mysql> insert into t1 values(2,2,3) on duplicate key update f3=f3+1,f2=f2+1 ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+—-+——+——+
| f1 | f2 | f3 |
+—-+——+——+
| 1 | 3 | 3 |
| 2 | 2 | 3 |
+—-+——+——+
2 rows in set (0.00 sec)

mysql> select version();
+————+
| version() |
+————+
| 5.1.50-log |
+————+
1 row in set (0.00 sec)

数据库

时间的单位换算

May 24th, 2010

1秒=1000毫秒(MS)
1秒=1,000,000 微秒(μS)
1秒=1,000,000,000 纳秒(NS)
1秒=1,000,000,000,000 皮秒(PS)

数据库

2010数据库技术大会与我的分享

April 13th, 2010

2010-4-2 ,2010数据库技术大会顺利在北京歌华开元宾馆如期招开,本次大会聚集了各个行业大量的数据库高手,牛人。非常荣幸能在这样的大会上和大家分享“数据库架构实践和性能优化”。

两天的会议真是收获不少,不但见到了很好老朋友,还认识了许多新朋友,更重要是开阔了眼界。离开京城的前一天晚上还到了老同学家做客,当晚喝得迷迷糊糊。真是人生一大快事。

最后,感谢it168熊老师,为我演讲写了报道。非常开心。谢谢。

大会: http://dtcc.it168.com/

报道: http://tech.it168.com/a2010/0403/869/000000869180.shtml

数据库

Berkeley DB

November 30th, 2009

Berkeley DB (DB)是一个高性能的,嵌入数据库编程库,和C语言,C++,Java,Perl,Python,PHP,Tcl以及其他很多语言都有绑定。 Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据,广泛用于各种操作系统包括大多数Unix类操作系统和Windows操作系统以及 实时操作系统。
2.0版本或以上的Berkeley DB由Sleepycat Software公司开发,并使用基于自由软件许可协议/私有许可协议的双重授权方式提供[1],附有源代码。开发者如果想把Berkeley DB嵌入在私有软件内需要得到Sleepycat公司的许可,若将软件同样遵循GPL发布,则不需许可即可使用。而2.0版本以下的则使用BSD授权,可 自由作商业用途。
Berkeley DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的 ndbm,GNU项目的gdbm),Berkeley DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。在这以后,Berkeley DB得到了广泛的应用,成为一款独树一帜的嵌入式数据库系统。2006年Sleepycat公司被Oracle 公司收购,Berkeley DB成为Oracle数据库家族的一员,Sleepycat原有开发者继续在Oracle开发Berkeley DB,Oracle继续原来的授权方式并且加大了对Berkeley DB的开发力度,继续提升了Berkeley DB在软件行业的声誉。Berkeley DB的当前最新发行版本是4.7.25。
值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。

目录 [隐藏]

Berkeley DB-Berkeley DB的体系结构

Berkeley DB以拥有比Microsoft SQL Server和Oracle等数据库系统而言更简单的体系结构而著称。例如,它不支持网络访问—程序通过进程内的API访问数据库。 他不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。 访问数据库的程序自主决定数据如何储存在记录里,Berkeley DB不对记录里的数据进行任何包装,每个记录有且只有两部分:键、值,所以在Berkeley DB的背景下通常用key/data pair指代一个记录。记录和它的键都可以达到4G字节的长度。
尽管架构很简单,Berkeley DB却支持很多高级的数据库特性,比如ACID 数据库事务处理,细粒度锁,XA接口,热备份以及同步复制。
Berkeley DB包含有与某些经典Unix数据库编程库兼容的接口,包括:dbm,ndbm和hsearch。

Berkeley DB-Berkeley DB的核心数据结构

数据库环境句柄DB_ENV: 每个DB_ENV相当于一个数据库,它包含了数据库全局信息,比如缓冲区大小、以及对事务、日志、锁等子系统的全局配置信息。
数据库句柄结构DB:每个DB相当于关系数据库的一个表,其中存储了很多key/data pair。DB句柄代表了一个包含了若干描述数据库表属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据 库处理函数指针,大多数形式为 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函数。
数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别对应数据本身和数据的长度。
数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质上就是一个关于特定记录的遍历器。注意到DB支持多重记录(duplicate records),即多条记录有相同关键字,在对多重记录的处理中,使用游标是最容易的方式。
数据库环境句柄结构DB_ENV:环境在DB中属于高级特性,本质上看,环境是多个数据库的包装器。当一个或多个数据库在环境中打开后,环境可以为这些数据库提供多种子系统服务,例如多线/进程处理支持、事务处理支持、高性能支持、日志恢复支持等。
DB中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种操作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。
Berkeley DB数据访问算法
在数据库领域中,数据访问算法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。 大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据 需要存储数据的特点进行选择。
B+树算法
B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构.
HASH算法
DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。
要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。 和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。
对算法的选择首 先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字 有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况 下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。

Berkeley DB-Berkeley DB的资源链接

官方主页:http://www.oracle.com/database/berkeley-db/db/index.html
产品下载:http://www.oracle.com/technology/software/products/berkeley-db/index.html
官方开发者文档中心:http://www.oracle.com/technology/documentation/berkeley-db/db/index.html
产品技术信息: http://www.oracle.com/technology/products/berkeley-db/pdf/berkeley-db-family-datasheet.pdf

http://www.oracle.com/database/docs/berkeley-db-datasheet.pdf

http://www.oracle.com/database/docs/Berkeley-DB-v-Relational.pdf

官方主页上有很多有趣的成功案例的白皮书和技术文档,值得大家学习

数据库

Data unload utility

November 13th, 2009

经常从数据库中unload数据,或是业务需要,或是自己分析,或是要导入其他DB,以往惯于用sqlplus(spool).
昨天实在无聊,就编译了一个小小的 utility ,没有含金量,纯属娱乐

1.环境

oracle@dbatest1:/tmp/ #cat /etc/issue
Red Hat Enterprise Linux Server release 5 (Tikanga)

oracle@dbatest1:/tmp/flat/a #gcc -v
gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)

2.测试

ROOTDBA@ora11g>select * from t_info ;

ID NAME                                          ADDR
———- ——————————————— ————————————————–
1 hunter                                        No.860
2 rootdba                                       No.1387
3 yxyup                                         No.1387

oracle@dbatest1:/u01/flat #./flat_unloader rootdba/abc123 t_info

Copyright (c) YangXiangYong 2009, all rights reserved.
Working in 51job.com (yangxy@163.com).

1,hunter    ,No.860
2,rootdba   ,No.1387
3,yxyup     ,No.1387

下载

数据库

SQL Server 系列MCITP认证

November 6th, 2009

SQL Server 2005系列MCITP认证的考试途径

认证全称

考试全称

数据库开发
MCITP: Database Developer
70-431: TS: Microsoft SQL Server 2005 – Implementation and Maintenance
70-441: PRO: Designing Database Solutions by Using Microsoft SQL Server 2005
70-442: PRO: Designing and Optimizing Data Access by Using Microsoft SQL Server 2005
数据库管理
MCITP: Database Administrator
70-431: TS: Microsoft SQL Server 2005 – Implementation and Maintenance
70-443: TS: Designing a Database Server Infrastructure by Using Microsoft SQL Server 2005
70-444: PRO: Optimizing and Maintaining a Database Administration Solution by Using Microsoft SQL Server 2005 ITExam Prep.com
商务智能开发
MCITP: Business Intelligence Developer
70-431: TS: Microsoft SQL Server 2005–Implementation and Maintenance
70-445: TS: Designing Business Intelligence Solutions by Using Microsoft SQL Server 2005 Analysis Services
70-446: PRO: Designing a Business Intelligence Infrastructure by Using Microsoft SQL Server 2005

SQL Server 2008系列MCITP认证的考试途径

认证全称

考试全称

SQL2008
数据库管理 MCITP:Database Administrator 2008
70-432: TS:Microsoft SQL Server 2008 Implementation and Maintenance
70-450:PRO:Designing, Optimizing and Maintaining a Database Server Infrastructure using Microsoft SQL Server 2008
SQL2008
数据库开发
MCITP:Database Developer 2008
70-433: TS:Microsoft SQL Server 2008 Database Development
70-451:PRO:Designing Database Solutions and Data Access Using Microsoft SQL Server 2008
SQL2008
商务智能开发 MCITP:Business Intelligence Developer 2008
70-448: TS:Microsoft SQL Server 2008 Business Intelligence, Implementation and Maintenance
70-452:PRO:Designing a Business Intelligence Infrastructure Using Microsoft SQL Server 2008

SQL2005升级SQL2008 MCITP认证的考试途径

已获得证书

升级考试科目

升级后的证书

数据库管理
MCITP:Database Administrator on SQL Server 2005
70-453:Upgrade: Transition Your MCITP SQL Server 2005 DBA to MCITP SQL Server 2008 DBA MCITP:Database Administrator 2008

MCTS:SQL Server 2008, Implementation and Maintenance
数据库开发
MCITP:Database Developer on SQL Server 2005
70-454:Upgrade: Transition Your MCITP SQL Server 2005 Database Developer to MCITP SQL Server 2008 Database Developer MCITP:Database Developer 2008

MCTS:SQL Server 2008, Database Development
商务智能开发
MCITP:Business Intelligence Developer on SQL Server 2005
70-455:Upgrade: Transition Your MCITP SQL Server 2005 Business Intelligence Developer to MCITP SQL Server 2008 Business Intelligence Developer MCITP:Business Intelligence Developer 2008

MCTS:SQL Server 2008, Business Intelligence Development and Maintenance

数据库

How to resolve ORA-01455 when met

October 28th, 2009

昨晚,突然有用户反应页面上有部分信息看不到了,经紧锣密鼓的问题排查后,在中间件服务器上发现数据库 ORA-1455错误(ORA-01455: converting column overflows integer datatype),同时也看到了全部SQL。将此SQL拿到数据库上执行,一切正常。那么是什么原因造成 overflows的呢?

一一查看选出的列后发现,共有七列,结果其中一列的值已到大于21亿了,于是想难道是这个列数值大太了,导到程序无法接受了。马上请开发同事查看程序,结果和猜想的一样的,程序中这个列对应的变量定义是long int.最大只能接受到2147483649。

问题原因找到了,解决方法不用多说,相信大伙儿都知道了,hehe.

附C中ANSI标准数据类型

c_datatype

数据库

Density的公式

October 26th, 2009