假设一个主要包含 InnoDB 表的生产 OLTP 系统
任何详述特定status变量和诊断的轶事将不胜感激。
首先让我承认我对硬盘的内部工作原理非常无知。因此,当我阅读变量innodb_flush_method的手册时,它让我感到困惑。我可以用外行的术语解释 O_DSYNC 和 O_DIRECT 的区别,以及如何知道这是否是数据库服务器上的性能问题。
我的设置的一些统计信息:运行 MySQL 5.1.49-64 位的 Mac OSX 10.6(32 位内核,因为架构已过时)(希望它能让我使用内存)。8GB RAM,~6GB innodb 数据/索引。
所以我有这个审计表(跟踪我数据库中任何表的操作):
CREATE TABLE `track_table` (
`id` int(16) unsigned NOT NULL,
`userID` smallint(16) unsigned NOT NULL,
`tableName` varchar(255) NOT NULL DEFAULT '',
`tupleID` int(16) unsigned NOT NULL,
`date_insert` datetime NOT NULL,
`action` char(12) NOT NULL DEFAULT '',
`className` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `userID` (`userID`),
KEY `tableID` (`tableName`,`tupleID`,`date_insert`),
KEY `actionDate` (`action`,`date_insert`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
我需要开始归档过时的项目。该表已增长到大约 5000 万行,因此我可以删除行的最快方法是一次删除一个表(基于tableName)。
这工作得很好,但在一些写入繁重的表上,它不会完成。我的查询删除所有delete对 tupleID/tableName 组合具有关联操作的项目:
DELETE FROM track_table WHERE tableName='someTable' AND tupleID IN (
SELECT DISTINCT tupleID FROM track_table …Run Code Online (Sandbox Code Playgroud) 我查看了 my.ini 并看到了各种默认设置。我的数据库在一台独立的 PC 上运行。我想总体上优化 InnoDB 和 MySQL 的性能以提高性能。没有磁盘空间限制。我应该更改哪些默认设置以优化以获得更好的性能、可靠性和可能的时间点备份 [高可用性]。
已编辑
目前,每当我通过 MySQL Administrator 上的维护运行“优化表”时,它都会显示:
表不支持优化,改为重新创建+分析
在所有桌子上。我所有的表都是InnoDB,但为什么不支持Optimize?
我有一个几乎从不查询的数据包日志数据库。它只需要快速插入即可。我使用 InnoDB 是因为我想保持 ACID 合规性,因为即使丢失一个数据包也可能对我们的客户造成损害。在性能调优方案中,我通过多个数据库连接向服务器发送 1,000,000 个数据包。但是无论我在 my.cnf 中使用什么设置,我都无法让 mysqld 进程在 12 核的系统上使用超过 900% 的 CPU。(盒子上没有其他东西在运行。)
我设置了以下内容
innodb_file_per_table = 1innodb_write_io_threads = 64innodb_read_io_threads = 64innodb_thread_concurrency = 0如果我使用 MyISAM,我可以在大约 6 秒内写入所有数据包。但是 InnoDB 大约需要 25。我可以让 MySQL 使用剩余的系统资源并更快地插入吗?
编辑:这是表的架构:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | …Run Code Online (Sandbox Code Playgroud) 我有一个数据库,其整个大小约为 44GB,其中 ibdata1 约为 35GB。这没有意义,因为数据的大小不应超过 10GB。
我使用以下查询来估计数据大小:
SELECT CONCAT(table_schema, '.', table_name),
CONCAT(ROUND(table_rows / 1000000, 2), 'M') rows,
CONCAT(ROUND(data_length / ( 1024 * 1024 * 1024 ), 2), 'G') DATA,
CONCAT(ROUND(index_length / ( 1024 * 1024 * 1024 ), 2), 'G') idx,
CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 * 1024 ), 2), 'G') total_size,
ROUND(index_length / data_length, 2) idxfrac
FROM information_schema.TABLES
ORDER BY data_length + index_length DESC
LIMIT 30;
Run Code Online (Sandbox Code Playgroud)
任何想法如何清理 ibdata1 以及它为什么增长这么多?
顺便说一句,我使用 innodb_file_per_table
我有 Windows 10 训练营。我已经安装了最新版本的 MySQL 社区服务器。我还在 IIS 上安装了 WordPress。MacBook 有 16Gb 的内存。这是我的配置文件
[client]
no-beep
# pipe
# socket=0.0
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
datadir=C:/ProgramData/MySQL/MySQL Server 5.6/Data
character-set-server=utf8
]default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-output=FILE
general-log=0
general_log_file="DESKTOP-F1OO1LC.log"
slow-query-log=1
slow_query_log_file="DESKTOP-F1OO1LC-slow.log"
long_query_time=10
log-error="DESKTOP-F1OO1LC.err"
server-id=1
max_connections=151
query_cache_size=0
table_open_cache=2000
tmp_table_size=90M
thread_cache_size=10
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=171M
key_buffer_size=8M
read_buffer_size=64K
read_rnd_buffer_size=256K
innodb_additional_mem_pool_size=13M
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size=7M
innodb_buffer_pool_size = 4G
innodb_log_file_size=48M
innodb_thread_concurrency=17
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
query_cache_type=0
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
Run Code Online (Sandbox Code Playgroud)
有什么明显的我做错了或者你需要更多信息吗?我试过遵循各种指南,但对所有可用的选项感到迷失。
目前正在查看每秒最多 …
innodb ×7
mysql ×7
performance ×3
mysql-5.5 ×2
delete ×1
ibdata ×1
myisam ×1
mysql-5.6 ×1
optimization ×1
windows ×1
windows-10 ×1