PostgreSQL从菜鸟到专家 Windows中安装PostgreSQL

在Windows中安装PostgreSQL

在本小节开始前,先给Windows用户一些好消息。虽然PostgreSQL是为类UNIX平台开发的,它却是可移植的。

现在已经可能在Windows上写PostgreSQL客户端程序,而且从7.1版开始,PostgreSQL可以编译安装和作为一个PostgreSQL服务器运行在Windows NT 4,2000,XP和Server 2003中。

从PostgreSQL 8.0开始,已经有了Windows本地版本了,为服务端和客户端程序提供了Windows的安装程序,这让在Windows下的安装非常轻松。在8.0版之前,Windows用户需要安装一些软件来在Windows上提供UNIX功能。

PostgreSQL从菜鸟到专家 什么是数据库管理系统

 什么是数据库管理系统

韦氏在线字典(Merriam-Webster online dictionary,http://www.merriam-webster.com)定义数据库为一个为(通过计算机)高速搜索和检索的而特别组织的大量数据集。

数据库管理系统(database management system,DBMS)通常是一套用来让程序开发人员从繁重的数据存储细节和管理中解脱出来的程序库、应用程序以及工具套件。它还提供了用来搜索和更新记录的能力。多年来,数据库管理系统发展出大量的特点用来解决各种各样特别的数据存储问题。

数据模型

MySQL数据库InnoDB存储引擎 表的page利用率和optimize table

上一篇我们介绍了ibd_used这个工具,我们用来量化看表数据文件的page使用率。这里用来说明optimize table这个命令的问题和优化。

实例准备

在MySQL数据库test中,建一个InnoDB存储引擎的表,代码如下所示:

CREATE TABLE `tb` (
`seq_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`a` varchar(32) DEFAULT NULL,
`b` varchar(32) DEFAULT NULL,
`c` varchar(32) DEFAULT NULL,
`d` char(255) DEFAULT NULL,
Primary key (seq_id),
KEY a (a),
KEY bc (b,c),
KEY cb (c,b)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

执行语句为“insert into tb(a,b,c) values(randstr, randstr, randstr);” randstr是客户端程序生成的长度30字节的随机字符串。30个线程并发,每个线程插入1w条记录。

等待更新完成后(包括purge完成,从系统的vmstat上看无任何io),执行./ibd_used tb.ibd 0 100000000,可以从最后4行看到各个索引的page平均利用率如下图。

PostgreSQL从菜鸟到专家 第二章关系数据库原理

 第二章关系数据库原理

在本章中,我们将研究什么会组成一个数据库系统,特别是PostgreSQL这样的现实世界中非常有用的关系数据库系统。我们将从电子表格开始,它和关系数据库有很多相同的地方,同时也有重大的局限性。我们将学习像PostgreSQL一样的关系数据库怎么拥有比电子表格强悍的很多功能。顺带,我们将继续我们的非正式的对SQL的研究。

特别是,本章将讨论以下主题:

l   电子表格:它们的问题和局限

l   数据库怎样存储数据

l   怎样访问数据库中的数据

l   基本的数据库设计,用到多个表格

l   表之间的关系

l   一些基本数据类型

l   NULL值,用来表示一个未知的值

PostgreSQL从菜鸟到专家 数据库的数据存取设计

 将数据存入数据库

从表面上看,关系数据库,例如PostgreSQL,拥有很多类似于电子表格的地方。但是,当你了解数据库的底层结构,你可以发现它复杂得多,主要因为它有能力通过复杂的方法将表格关联到一起。它可以比电子表格有效地存储更多复杂的数据,并且它有用很多其他功能方便选择存储的数据。例如,数据库可以管理多个用户同时使用。

让我们看看存放我们简单的但表格客户列表到数据库,看这么做有什么好处。在后面的章节,我们将扩展它并看PostgreSQL怎么帮助我们解决客户订单的问题。

就像我们在前面章节看到的,数据库由表(tables)组成,或者用更正式的术语,关系(relations)。我们将在本书中使用表这个术语。表里头包含数据行(更正式的叫法是元组(tuples)),并且每条数据行都包含许多列(columns),或者叫做属性(attributes)。

首先,我们需要设计一个表来保存我们的客户信息。好消息是,电子表格的数据往往是一个几乎现成的解决方案,因为它按照一定的行和列保存数据。在开始建立一个基本的数据库表格前,我们需要确定三件事情:

为MySQL数据库增加线程内存监控

使用MySQL中我经常发现mysqld的内存使用会涨的很快(Buffer Pool是大页分配的),以至于使用SWAP,到底Server层用了多少内存,没有一个监控机制,所以第一步我编写了个patch(基于5.6.6)来监控每个线程用了多少内存,一旦mysqld进程使用太多内存,就去看哪些线程用的多,杀掉这些线程。

打上补丁后的效果像这样:
This is the effect after patched:

MySQL数据库InnoDB存储引擎的磁盘空间利用率分析

这周阿里巴巴变集团DBA内部技术交流分享时,支付宝的黄忠同学提了一个问题,关于InnoDB存储引擎索引page 的利用率。

 page利用率

主要是指btree里面每个page的使用被使用的空间大小。我们知道MySQL数据库InnoDB存储引擎默认一个page大小是16k。但实际使用情况不会总用满。我们定义为所有page的总使用字节除以总字节数。
在理论分析之前,我们要先弄个工具,查一下。

实例统计

写了一个简单的工具,读ibd文件上的每个page,算出每个page的实际使用字节,可以得到利用率。
我们找了线上一个库来模拟。表中有1个自增主键和3个非聚簇索引。不影响结论地简化为如下:

PostgreSQL从菜鸟到专家 Linux和Unix系统上源码编译安装PostgreSQL

通过源码安装PostgreSQL

就像前一章讲述的,在很多Linux发行版中你可以使用RPM包安装PostgreSQL。另外,你可以在任何UNIX兼容的系统中从源码创建和安装PostgreSQL,包括Mac OS X。

PostgreSQL的源码可以在http://www.postgresql.org找到。在这里,你将找到最新的源码以及下一个版本的beta测试版的源码。除非你很喜欢尝鲜,否则建议你使用最新的稳定版本。

你可以找到整个打包了的PostgreSQL的源码,可能是gzip压缩的tar打包文件,就像postgresql-9.0.0.tar.gz或者bzip2压缩的tar打包文件,就像postgresql-9.0.0.tar.bz2。在写本文的时候,PostgreSQL打包文件已经超过13MB了。

PostgreSQL从菜鸟到专家 PostgreSQL介绍

 

第一章 PostgreSQL介绍

本书都是关于一个最近最成功的开源产品,一个名叫PostgreSQL的关系数据库。

数据库开发商和开源开发者都是PostgreSQL的热心拥护者。任何使用程序管理大量数据的人都可以从数据库中获得大量益处。PostgreSQL数据库是一个非常优秀的关系数据库实现,全功能,开源且免费使用。

PostgreSQL 数据库支持大量的主流开发语言,包括C,C++,Perl,Python,Java,Tcl以及PHP。它是最接近工业标准SQL92的查询语言,并且正在实现新的功能以兼容最新的SQL标准:SQL2003。PostgreSQL也获得数个奖项,包括三次被评为Linux Journal杂志编辑选择奖最佳数据库(2000,2003和2004年度)以及2004年度Linux新媒体奖最佳数据库系统。我们也许我们有点超越自我。你也许想知道到底PostgreSQL是什么,为什么你要使用它。

PostgreSQL从菜鸟到专家 什么是PostgreSQL数据库

什么是PostgreSQL数据库?

现在是时候告诉你到底PostgreSQL是什么了。它是一个包含关系模型和支持SQL标准查询语言的DBMS(数据库管理系统)。

PostgreSQL也非常先进和可靠,并且性能非常高。它基本上可以在任何UNIX平台上运行,包含类UNIX系统,比如FreeBSD、Linux和Mac OS X。它也可以在Microsoft Windows NT/2000/2003服务器版本上运行,甚至可以在Windows XP上进行开发。并且,就像本章开始提及的,它免费且开源。

PostgreSQL可以与其他DBMS媲美。它基本上包含其他所有商业的或开源的数据库中你能找到的功能,甚至一些你找不到的功能。

PostgreSQL 包含以下功能(在PostgreSQL FAQ里面列出的):