转自: http://kenwu.me/talk-about-mysql-variables
mysql里的变量分系统变量和用户变量.
系统变量
其中系统变量,又分全局(global)和会话(session)两种.
全局系统变量,主要影响整个mysql实例的全局设置.
大部分变量都是作为mysql的服务器调节参数存在.新增或修改这类变量, 会影响mysql的运行方式.
比如: auto_increment_increment 代表序列的自增值, 默认为1
另外, mysql中,只有一部分变量是支持运行时动态修改的.
变量修改的作用范围,是那些重新创建连接到mysql服务器的客户端连接.
如果你的连接是由应用通过连接池来维护的,并且,是长连接的,那么,此时在服务器运行过程中,动态地修改全局变量对你是没有什么影响的.
通过全局变量, 我们可以想到一些应用场景:
1, 在存储过程, 函数, sql里,使用一些业务相关的全局变量.
经常编写业务相关的存储过程,函数的朋友, 可能会需要针对不同业务,设置能共享访问的全局变量.
比如, 公司的总人数,很多存储过程都需要调用这个值,但是因为这个值,不是经常会改变的,不需要每次都count.
所以大多数人会考虑把它cache一把,那么mysql提供的全局变量,就是一个好的存储场所.
2, 数据库配置中心
首先,这不一定是一种好的解决方式, 特别是大型地分布式系统.但是想到了,就跟大家分享一下.
主要就是利用了三层,四层架构的系统, 必不可少的数据库层来实现的.
大家知道, 应用的配置, 大多数是用配置文件或配置服务器来实现, 前者需要跟着项目打包, 部署.
后者, 只要在应用初始化或运行时,去配置中心取配置就行了.(淘宝这边两者都在用)
而数据库的配置中心, 其实类似配置服务器, 只不过灵活运用了mysql的变量机制.
它能继承配置服务器的多数优点, 但最大的特色就是在 sql, function , procedure 里都可以很方便地引用到.(相比用表的方式, 要方便一些)
并且本身就具有缓存, 移植得话, mysql得导出也是很快.
所以小系统, 想快速得搭建一个配置中心,利用mysql感觉还是不错的.
调用语法:
select * from user_info where id = @@global.admin_id -- 例子,通过全局里配置的管理员id来取用户信息
以下是全局变量的一些常用命令,比较简单:
set global auto_increment_increment=1; -- 设置序列的增长值
show global variables; -- 显示所有的global变量
show global variables like '%test%' -- 查询包含test字符串的global变量
会话系统变量, 主要用于在当前客户端连接的生命周期内.它的变量值是全局变量的一份拷贝.
如果连接断开, 对当前会话变量所做修改都会被重置.
比如, 服务器会话变量 autocommit 默认为 true , 而你在非常连的客户端连接里设置了 false , 那么在执行完sql后, 连接就会断开. 此后,如果创建新的连接来执行sql, autocommit又会默认 true.
会话变量的使用场景与全局类似,只是生命周期不同, 因此可以用来
统计同一连接内请求sql次数, sql类型等信息.
session变量的一些常用操作:
set session auto_increment_increment=1; -- 设置序列的增长值
show variables; or show session variables; -- 如果不指明, 默认使用session变量
show variables like '%test%' or show session variables lile '%test%' -- 查询包含test字符串的session变量
用户变量
基于会话变量实现的, 可以暂存值, 并传递给同一连接里的下一条sql使用的变量.
当客户端连接退出时,变量会被释放.
应用场景:
同一连接,未关闭情况下,帮你暂存一些计算结果.
比如
select @admin_id:=max(id) from user_info;
select * from user_info where id = @admin_id
以上两条sql在同一connection中完成.
另外,注意,用户变量前只有1个@, 2个@是用于存取系统变量的.
业务相关的变量定义太多,无法区分系统全局变量?
这类问题,可以通过mysql提供的结构化系统变量来解决.
他们有独特的表示形式:
instance_name.test_var
比一般的变量多了一个instance_name.这样,你就可以很方便地对他们进行分类,比如 app.test_var,就可以区别于系统的var了.
PS: 其实,普通的系统变量,它也属于结构化变量,只不过他们默认隶属于 default 这个 instance, 不需要显示出来罢了.
影响mysql性能的系统变量
以下内容参考 http://www.mysqlperformanceblog.com/2006/06/08/mysql-server-variables-sql-layer-or-storage-engine-specific/
bulk_insert_buffer_size
批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的.适用于在一次性插入100-1000+条记录时, 提高效率.默认值是8M.可以针对数据量的大小,翻倍增加.
concurrent_insert
并发插入, 当表没有空洞(删除过记录), 在某进程获取读锁的情况下,其他进程可以在表尾部进行插入.
值可以设0不允许并发插入,1当表没有空洞时,执行并发插入,2.不管是否有空洞都执行并发插入.
默认是1.针对表的删除频率来设置.
delay_key_write
针对MyISAM存储引擎,延迟更新索引.意思是说,update记录时,先将数据up到磁盘,但不up索引,将索引存在内存里,当表关闭时,将内存索引,写到磁盘. 值为 0不开启, 1开启. 默认开启.
delayed_insert_limit, delayed_insert_timeout, delayed_queue_size
延迟插入, 将数据先交给内存队列, 然后慢慢地插入.但是这些配置,不是所有的存储引擎都支持, 目前来看, 常用的InnoDB不支持, MyISAM支持. 根据实际情况调大, 一般默认够用了.
expire_logs_days
自动删除超过指定天数的日志. 建议为0,表示“不自动删除”.
flush, flush_time
是否启用, 同步表数据到磁盘.以及自动同步的间隔时间.
针对flush_time, 官方建议只在Windows 9x或Me,或有最小资源的系统中使用该选项.所以,建议关闭.
ft_boolean_syntax, ft_max_word_len, ft_min_word_len,ft_query_expansion_limit, ft_stopword_file
针对MyISAM设置的参数, 全文搜索特性. 如果你不使用 FULLTEXT 索引,就不需要优化了. 详见mysql参考手册.
join_buffer_size
用于表间关联(join)的缓存大小.建议设为 131072.(128K)
key_buffer_size
索引块缓存区大小, 针对MyISAM存储引擎,该值越大,性能越好.但是超过操作系统能承受的最大值,反而会使mysql变得不稳定.
如果不是MyISAM存储引擎,一般设置为 4-32M大小.
key_cache_age_threshold, key_cache_block_size, key_cache_division_limit
键值缓存的相关设置.需要针对实际情况调优.只是针对MyISAM储存引擎.
large_pages
是否启动大页面支持.意思是,可以一些缓存分配更大的空间.这个特性已经被InnoDB, MyISAM等常用存储引擎支持.
low_priority_updates
低优先级更新.意思是, 所有的写操作(表写锁), 包括update,delete,insert等都需要等待读操作完成后才执行 (表读锁解开).
因为是针对表的锁,所以,这里仅支持MyISAM.
max_write_lock_count
最大写锁数量.这个变量的含义是, 当写锁达到一定数量后, 就不限制读锁, 允许一部分读锁进入.(可以读数据了,否则需要等待写锁释放后,才能读)
因为是针对表的锁,所以,这里仅支持MyISAM.
preload_buffer_size
重载索引时分配的缓冲区大小, 该变量仅支持MyISAM.
read_buffer_size, read_rnd_buffer_size
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值, 默认值为131072。
sort_buffer_size
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作.默认数值是2097144(2M),建议加大到 16777208 (16M)。
timed_mutexes
显示mutexes的统计信息, 默认关闭OFF
tmp_table_size
临时表的大小,在未超过大小之前进行的操作是在内存中的, 当超过后,mysql会自动转换到硬盘上.
分享到:
相关推荐
小议电气工程及其自动化现状及未来发展趋势.pdf
这主要是因为Oracle和MySQL在处理查询优化、内存管理和并行执行策略上的差异。 Oracle在处理联合查询时,通常会利用其高级的查询优化器,如CBO(Cost-Based Optimizer),根据统计信息预测执行计划的成本,选择最优...
最后,数据整合将分散的信息集成,形成一个智能化的决策支持系统,帮助电力部门更好地预测和满足用户的用电需求,优化电网资源配置,提升服务质量。 此外,电力系统自动化还涉及变电站自动化、配电自动化、智能电网...
小议电视新闻的开拓与优化.doc
小议工程项目安全管理存在问题及其对策.doc
3. 产业结构调整:FDI可以引导产业结构向更高附加值的方向发展,特别是对制造业和服务业的投入,推动了中国经济结构的优化。 4. 区域发展差异:FDI在沿海地区的集中使得地区间发展差距加大,形成了二元经济结构。这...
资本结构优化则是寻找一种平衡,使得企业在一定时期内能以最低的综合资本成本运作,同时最大化企业价值。这种最优状态被称为【最优资本结构】,它需要通过筹资和融资策略来实现。 【资本结构优化】的重要性在于其对...
### 抖动算法小议——深入探讨多媒体技术中图像的抖动算法 #### 引言 在多媒体领域,尤其是在图像处理技术中,抖动算法扮演着至关重要的角色。本文旨在通过对抖动算法的深入解析,帮助读者理解其原理及其在灰度...
【信息技术在初中教学的优化】\n\n信息技术在现代社会已经成为不可或缺的一部分,对于初中阶段的学生来说,掌握信息技术不仅是技能提升,更是未来生活和学习的基础。在信息化教育中,信息技术教育不仅包含计算机基础...
为了确保板栗的种植栽培质量,提高产量,并减少病害的发生,掌握一系列科学的种植技术及其要点是至关重要的。本文档将详细探讨板栗的种植栽培技术,包括选址、整地、栽苗、病害防治和肥水管理等方面。 首先,板栗的...
保险销售渠道一体化是指将多种销售方式如个人代理营销、直接销售、电话销售、邮寄、研讨会、相关团体销售、银行代理保险和网络销售等融合,形成一个协同运作的销售体系,以提升销售效率、降低成本并优化客户体验。...
小议经济型酒店消费者心理及消费方向.doc
小议外汇期权会计在新规则中应用 本文主要探讨了小议外汇期权会计在新规则中的应用,涉及到外汇期权的概念、分类、确认、计量和披露等方面的知识点。 一、外汇期权的概念 外汇期权是一种金融衍生工具,允许持有人...
燕麦作为一种粮饲兼用的作物,其营养价值高,含有丰富的蛋白质、氨基酸、膳食纤维、不饱和脂肪酸和多种微量元素,对于人体健康有着诸多益处,尤其在降血脂、调节血糖等方面表现出良好的食疗效果。...
nRF401芯片是挪威Nordic公司研发的一款单片UHF无线收发芯片,工作在433MHz ISM频段,这种频段主要是工业、科学和医疗等使用的无需许可的频段。该芯片具有以下显著特点: 1. 调制方式:nRF401采用的是FSK(频移键控...
**小议MVC模式开发** MVC(Model-View-Controller)模式是一种广泛应用于Web应用程序设计的架构模式,它的核心思想是将业务逻辑、数据处理和用户界面进行分离,以提高代码的可维护性和可扩展性。在本文中,我们将...
综上所述,电力系统的中性点接地方式及其零序保护是保证电网安全稳定运行的关键技术。在实际设计和操作中,应综合考虑电力系统的结构、负荷特性、环境条件等因素,选择最适合的接地方式,并结合零序保护措施,设计出...
小议嵌入式计算机技术.pdf
法治思想起源小议.docx
小议食品安全问题.doc