MySQL数据库实验总结和心得(怀孕前期在前壁中期会变后壁吗)

mysql数据库可靠性分析

mysql数据库有undo空间

5种mysql做可靠性分析的方案:

1.MySQL Clustering(ndb-cluster stogare)

简介:

MySQL公司以存储引擎方式提供的高可靠性方案,是事务安全的,实时复制数据,可用于需要高可靠性及负载均衡的场合。该方案至少需要三个节点服务器才能达到较好的效果。

成本:

节点服务器对RAM的需求很大,与数据库大小呈线性比例;

最好使用千兆以太网络;

还需要使用Dolphin公司提供的昂贵的SCI卡。

优点:

可用于负载均衡场合;

可用于高可靠性场合;

高伸缩性;

真正的数据库冗余;

容易维护。

缺点:

随着数据库的变大,对RAM的需求变得更大,因此成本很高;

速度:

几乎 比典型的单独服务器(无千兆以太网,无SCI卡,存储引擎相关的限制少)慢10倍。

应用场合:

冗余,高可靠性,负载均衡

2. MySQL / GFS-GNBD/ HA (Active/Passive)

简介:

如果多个MySQL服务器使用共享硬盘作为数据存储,此方案如何?

GFS/GNBD可以提供所需的共享硬盘。

GFS是事务安全的文件系统。同一时刻你可以让一个MySQL使用共享数据。

成本:

最多n台高性能服务器的成本,其中一个激活的,其他作为备份服务器。

优点:

高可靠性

某种程度的冗余

按照高可靠性进行伸缩

缺点:

没有负载均衡

没有保证的冗余

无法对写操作进行伸缩

速度:

单独服务器的2倍。对读操作支持得较好。

应用场合:

需要高可靠性的、读操作密集型的应用

3. MySQL / DRBD / HA (Active/Passive)

简介:

如果多个MySQL服务器使用共享硬盘作为数据存储,此方案如何?

DRBD可以提供这样的共享硬盘。DRBD可以被设置成事务安全的。

同一时刻你可以让一个MySQL使用共享数据。

成本:

最多n台高性能服务器的成本,其中一个激活的,而其他则作为备份服务器。

优点:

高可靠性;

一定程度的冗余;

以高可靠性名义来看是可伸缩的。

缺点:

没有负载均衡

没有保证的冗余

在写负载方面没有伸缩性

速度:

在读写方面相当于单独服务器

应用场合

需要高可靠性、读操作密集型的应用

4. MySQL Write Master / Multiple MySQL Read Slaves (Active/Active)

简介:

考虑不同的读、写DB数据库连接的情况。可以使用一台主服务器用于写操作,而采用n台从服务器用于读操作。

成本:

最多1台高性能写服务器,n台读服务器的成本

优点:

读操作的高可靠性;

读操作的负载均衡;

在读操作负载均衡方面是可伸缩的。

缺点:

无写操作的高可靠性;

无写操作的负载均衡;

在写操作方面无伸缩性;

速度:

同单独服务器;在读操作方面支持得较好

应用场合

读操作密集型的、需要高可靠性和负载均衡的应用。

5. Standalone MySQL Servers(Functionally separated) (Active)

多台功能分离的单独服务器,没有高可靠性、负载均衡能力,明显缺点太多,不予考虑。

mysql数据库如何优化,优化了哪些功能

mysql的优化大的有两方面:

1、配置优化

配置的优化其实包含两个方面的:操作系统内核的优化和mysql配置文件的优化

1)系统内核的优化对专用的mysql服务器来说,无非是内存实用、连接数、超时处理、TCP处理等方面的优化,根据自己的硬件配置来进行优化,这里不多讲;

2)mysql配置的优化,一般来说包含:IO处理的常用参数、最大连接数设置、缓存使用参数的设置、慢日志的参数的设置、innodb相关参数的设置等,如果有主从关系在设置主从同步的相关参数即可,网上的相关配置文件很多,大同小异,常用的设置大多修改这些差不多就够用了。

2、sql语句的优化

1、 尽量稍作计算

Mysql的作用是用来存取数据的,不是做计算的,做计算的话可以用其他方法去实现,mysql做计算是很耗资源的。

2.尽量少 join

MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。

3.尽量少排序

排序操作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL的响应时间。

对于MySQL来说,减少排序有多种办法,比如:

通过利用索引来排序的方式进行优化

减少参与排序的记录条数

非必要不对数据进行排序

【原】mysql的for update优化心得

一个消息表,需要被多个节点抓取,存在并发的情况,要求节点抓取的数据不能重复。

结论:可以解决需求,但会导致表锁,原因是for update只有在限制主键ID时,才会采用行锁,否则会采用表锁。所以要使用for update,必须限制查询表的主键ID。

结论:不能解决问题,且会造成 DEPENDENT SUBQUERY ,从而导致慢查询。原因是子查询的查询次数依赖于外层查询,当外查询数据过多时,会严重影响查询性能。

结论:不会造成慢查询,但会造成数据重复抓取。原因是临时表的查询没有采用 for update ,依然可以读取到正在修改的数据,所以当有并发请求时,可能会取到已被修改过的数据,造成脏读。

结论:能满足需求,且在百万级数据下仍然做到毫秒级查询(当然也跟机器配置有关)。

希望能帮到有需要的人。

6条比较有用的MySQL数据库操作的SQL语句小结

在MySQL数据库操作中,我们常常编写一些SQL语句来实现自己想要的功能。但是对于初学MySQL数据库的人来说这似乎又有一定的难度。本文我们总结了六条比较有用的SQL语句,初学者可以套用下面的格式,接下来就让我们一起来了解一下这部分内容。

1.计算年数

如果您想通过生日来计算这个人的年龄,可以用以下的语句来实现:

SELECT

DATE_FORMAT(FROM_DAYS(TO_DAYS(now())

-

TO_DAYS(@dateofbirth)),

\'%Y\')

+

0;

2.两个时间的差

取得两个

datetime

值的差。假设

dt1

dt2

datetime

类型,其格式为

‘yyyy-mm-dd

hh:mm:ss\',那么它们之间所差的秒数为:UNIX_TIMESTAMP(

dt2

)

-

UNIX_TIMESTAMP(

dt1

)

除以60就是所差的分钟数,除以3600就是所差的小时数,再除以24就是所差的天数。

3.显示某一列出现过N次的值

SELECT

id

FROM

tbl

GROUP

BY

id

HAVING

COUNT(*)

=

N;

4.计算两个日子间的工作日

所谓工作日就是除出周六周日和节假日。

SELECT

COUNT(*)

FROM

calendar

WHERE

d

BETWEEN

Start

AND

Stop

AND

DAYOFWEEK(d)

NOT

IN(1,7)

AND

holiday=0;

5.查找表中的主键

SELECT

k.column_name

FROM

information_schema.table_constraints

t

JOIN

information_schema.key_column_usage

k

USING

(constraint_name,table_schema,table_name)

WHERE

t.constraint_type=\'PRIMARY

KEY\'

AND

t.table_schema=\'db\'

AND

t.table_name=tbl\'

6.查看你的数库有多大

SELECT

table_schema

AS

\'Db

Name\',

Round(

Sum(

data_length

+

index_length

)

/

1024

/

1024,

3

)

AS

\'Db

Size

(MB)\',

Round(

Sum(

data_free

)

/

1024

/

1024,

3

)

AS

\'Free

Space

(MB)\'

FROM

information_schema.tables

GROUP

BY

table_schema

;

关于MySQL数据库的比较有用的SQL语句的介绍就到这里了.

未经允许不得转载:便宜VPS网 » MySQL数据库实验总结和心得(怀孕前期在前壁中期会变后壁吗)