QPS(Queries-per-second)
每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
读写锁
在实际的数据库系统中,每时每刻都在发生锁定,当某个用户在修改某一部分数据时,MySQL会通过锁定防止其他用户读取统一数据。MySQL锁的内部管理都是透明的。
读锁(共享锁)
是共享的,相互之间不排斥的。多个客户在通一时刻可以读取统一资源,互不干扰。
写锁(排他锁)
是排他的,一个写锁会阻塞其他写锁和读锁,出于安全考虑,确保给定的时间里只有一个用户能够执行写入操作,防止其他用户读取写在写入的统同一资源。
锁粒度
一种提高共享资源并发性的方式就是让锁定对象更具有选择性。尽量只锁定需要修改的部分数据,而不是所有的资源,更理想的方式是,只对会修改的数据片进行精准锁定。任何时候,在给定的资源下,只要锁定的数据量越少,则系统的并发程度越高,只要相互之间不发生冲突即可。
锁策略
在锁的开销和数据的安全性之间寻求平衡,这种平衡也会影响到性能。
行级锁(row lock)
大多数商业级数据库一般采用的方式。
可以最大程度的支持并发处理(同时也带来的最大的锁开销),在InnoDB和XtraDB,以及一些其他的存储引擎中实现了行级锁。行级锁只在存储引擎层实现,MySQL服务层没有实现。
表锁(table lock)
最基本,开销最小的锁策略。他会锁定整张表。每个用户在写操作时,需要先获得一个写锁,这回阻塞其他用户对该表的所有读写操作。只有没有写锁时,其他读取用户才能获取读锁,读锁之间是不相互阻塞的。
写锁比读锁有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面(写锁可以插入到锁队列中读锁的前面,读锁不能插入到写锁的前面)
服务器会为ALTER TABLE 之类的语句使用表锁,忽略存储引擎的锁机制。
ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
新增列:
ALTER TABLE table_name ADD column_name date
删除列:
ALTER TABLE table_name DROP COLUMN column_name
修改列
ALTER TABLE table_name ALTER COLUMN column_name year
存储引擎
负责MySQL中存储和提取。
存储过程丶触发器丶视图全部跨存储引擎实现。
InnoDB
1.灾难恢复性好
2.支持事务
3.使用行级锁
4.支持外键关联
5.支持热备份
XtraDB
是由Percona开发的一款MySQL数据库的高性能存储引擎,其目的是用来代替InnoDB存储引擎,可用于需要更高性能的环境。