在我的一个生产环境中,我们有两个实例在 RedHat 集群上运行,其中一个生产实例与该集群关联。
我们有 125G 主内存,24G InnoDB 缓冲池被 instance1 占用,12G 被 instance2 占用,这与 RedHat 集群无关。数据和事务日志都位于具有 ext3 文件系统的 LVM 磁盘分区上。
为了提高性能和更好的 I/O 吞吐量,我决定更改innodb_flush_method为O_DIRECT.
参考 MySQL 文档:
InnoDB 数据和日志文件位于 SAN 上,我们发现设置
innodb_flush_method为O_DIRECT会使简单SELECT语句的性能降低三倍。
提到高性能 MySQL Ver 2 和 3,它表示 InnoDB 开发人员发现使用innodb_flush_method=O_DSYNC. O_SYNCandO_DSYNC类似于fsync()and fdatasync():O_SYNC同步数据和元数据,而O_DSYNC只同步数据。
如果这一切看起来像是没有建议的很多解释,那么建议如下:
如果您使用类 Unix 操作系统并且您的 RAID 控制器具有电池供电的写入缓存,我们建议您使用
O_DIRECT. 如果没有,O_DIRECT根据您的应用程序,默认值或可能是最佳选择。
通过谷歌搜索,我得到了这个基准报告:on O_DSYNCvsO_DIRECT
基准报告: ==================== 1B …
我一直在想,max_used_connections一旦达到 的峰值,为什么值不会下降max_connections?
我总是刷新状态并降低此值以避免数据库连接拒绝错误和错误日志中的警告消息:
=====
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
121112 14:04:36 [Warning] Too many connections
=======
Run Code Online (Sandbox Code Playgroud)
mysql> select version();show variables like "%max_connections%";show global status
like "%Max_used%";show status like "%thread%";
+--------------+
| version() |
+--------------+
| 5.1.52-2-log |
+--------------+
1 row in set (0.00 sec)
+-----------------+-------+ …Run Code Online (Sandbox Code Playgroud) mysql performance max-connections mysql-5.1 performance-testing
我们有两个节点节点 A 和 B 的主对主复制,两者都在虚拟环境中。最初,节点 A 出现中断(磁盘空间问题)并停止复制。应用程序级流量已转移到节点 B 并重新定位节点 A 数据存储并提供可用空间。
节点 A 已成功启动并启动。在与节点 A 同步时,复制已开始并在节点 B 中出错,并且节点 B 中的 bin 日志已损坏。根本原因仍然是个谜。但是分析日志可以发现一些重复的条目,下面是错误日志信息:
[ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236).
[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position', Error_code: 1236
111014 20:25:48 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.001067', position 183468345.
Run Code Online (Sandbox Code Playgroud)
在这种情况下我们如何处理复制?我们可以跳过当前的 …
我们的生产环境中有一个主从复制。一开始在master上的mysql错误日志中发现了这个错误,后来在slave上发现了这个错误。至于所有的复制,数据库都很好,从属更新运行良好。尽管如此,此错误仍会出现在 mysql 错误日志中。我只是用谷歌搜索并检查了。这是一个错误。
它是否会对数据库产生任何影响,因为我们有多个复制主从架构的数据库实例?
错误日志:
111116 10:47:57 [Warning] Invalid (old?) table or database name '#sql-3d6f_122a#P#p7'
111116 10:47:57 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p8'
111116 10:47:57 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p9'
111116 10:47:57 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p10'
111116 10:48:29 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p1'
111116 10:48:29 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p2'
111116 10:48:29 [Warning] Invalid (old?) table or database name '#sql-3z8g_122a#P#p3'
111116 10:48:29 [Warning] Invalid (old?) …Run Code Online (Sandbox Code Playgroud) 我有一个表,其中 MyIsam 作为存储引擎包含数百万行。有一个清除任务,需要删除 35 天的旧数据。我按以下方式测量了行:
mysql> select count(*) from table_date;
+----------+
| count(*) |
+----------+
| 53217368 |
+----------+
2. Here are the min and max value for the table1:
mysql> select min(table_date),max(table_date) from table1;
+---------------------+---------------------+
| min(table_date) | max(table_date) |
+---------------------+---------------------+
| 2011-08-09 04:05:01 | 2012-01-13 04:04:16 |
+---------------------+---------------------+
row in set (0.01 sec)
3. Date and time 35 days ago from the current date & time will be:
mysql> select now(),now() - interval 35 day;
+---------------------+-------------------------+
| now() …Run Code Online (Sandbox Code Playgroud)