AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 14622
Accepted
ColinM
ColinM
Asked: 2012-03-08 22:36:09 +0800 CST2012-03-08 22:36:09 +0800 CST 2012-03-08 22:36:09 +0800 CST

使用 InnoDb 表进行会话存储有哪些关键配置设置?

  • 772

我想开始集群我的 PHP 应用程序服务器,但此时不想进行粘性会话负载平衡设置。但是,我想要持久保存到磁盘并实施适当锁定的会话。我有一个专用于数据库的服务器,有足够数量的免费内存,所以我想考虑在同一台机器上使用一个额外的 MySQL 实例纯粹用于会话存储。目前我在文件系统上的会话文件夹是 ~131Mb 并且有 ~23k 文件。我打算将 InnoDb 与 SELECT ... FOR UPDATE 一起使用来实现会话锁定。

在同一台服务器上运行两个针对不同目的优化的 MySQL 实例是不是一个坏主意?(如果是,为什么?)

对于仅限会话的实例,有哪些优化技巧?我希望它是持久的,但不介意在发生灾难时丢失一点数据,而对于主应用程序数据库,我不想冒任何数据丢失的风险。

如果我可以为这个 MySQL 实例腾出 256Mb 的 ram(主实例有 ~6Gb),我应该如何分配它?

是否禁用查询缓存?

我可以使用哪些设置来减少磁盘写入(因为我不太关心这个实例的耐用性)?例如 innodb_locks_unsafe_for_binlog、innodb_flush_method 等。

mysql innodb
  • 1 1 个回答
  • 206 Views

1 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-03-09T10:14:08+08:002012-03-09T10:14:08+08:00

    你可以尝试innodb_flush_log_at_trx_commit

    根据innodb_flush_log_at_trx_commit上的 MySQL 文档

    如果 innodb_flush_log_at_trx_commit 的值为 0,则日志缓冲区每秒写入一次日志文件,并对日志文件执行刷新到磁盘操作,但在事务提交时不执行任何操作。当值为 1(默认值)时,日志缓冲区在每次事务提交时写出到日志文件,并对日志文件执行刷新到磁盘操作。当值为 2 时,日志缓冲区在每次提交时写出到文件,但不对其执行刷新到磁盘操作。但是,当值为 2 时,日志文件也会每秒刷新一次。请注意,由于进程调度问题,每秒刷新一次并不能 100% 保证每秒发生一次。

    完全符合 ACID 需要默认值 1。您可以通过将值设置为不同于 1 来获得更好的性能,但是您可能会在崩溃中丢失多达一秒的事务。值为 0 时,任何 mysqld 进程崩溃都可以擦除最后一秒的事务。值为 2 时,只有操作系统崩溃或断电才能擦除最后一秒的事务。InnoDB 的崩溃恢复与值无关。

    为了在使用 InnoDB 和事务的复制设置中获得最大可能的持久性和一致性,请在主服务器 my.cnf 文件中使用 innodb_flush_log_at_trx_commit=1 和 sync_binlog=1。

    警告

    许多操作系统和一些磁盘硬件会欺骗刷新到磁盘的操作。他们可能会告诉 mysqld 刷新已经发生,即使它没有发生。那么即使设置为 1 也不能保证事务的持久性,在最坏的情况下,断电甚至会损坏 InnoDB 数据库。在 SCSI 磁盘控制器或磁盘本身中使用电池供电的磁盘缓存可以加快文件刷新速度,并使操作更安全。您还可以尝试使用 Unix 命令 hdparm 禁用硬件缓存中的磁盘写入缓存,或使用特定于硬件供应商的其他命令。

    基于此,除 1 之外的值会使 InnoDB 面临丢失 1 秒的事务价值或事务提交的数据价值的风险。

    至于innodb_flush_method,默认是最好的。我写了一篇较早的文章来描述 tweeking 的效果。

    至于运行 MySQL 的多个实例,只要您有足够的操作系统内存和多个实例的数据库连接内存就可以了。

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve