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
    • 最新
    • 标签
主页 / server / 问题

问题[myisam](server)

Martin Hope
Riccardo M.
Asked: 2016-07-01 01:20:55 +0800 CST

使用 MyISAM 进行删除和插入后的 MySQL 行为和磁盘空间处理

  • 0

我对带有 MyISAM 引擎的 MySQL 在删除后处理空闲/空白空间的方式以及插入新记录时的行为有疑问。

例如,考虑一个新的空数据库(例如,假设是 10 kb)。

插入 10000 条记录后(假设每条记录占用 1 kb),它在文件系统上的总大小变为 10010 kb。

然后,在删除 5000 条记录后,即使记录数减半,它在文件系统上的大小仍为 10010 kb(这并不奇怪,这是正常行为)。

然后,OPTIMIZE 命令可以对数据库进行“碎片整理”,并通过重新组织其数据来回收可用空间。

但是,如果我完全忽略 OPTIMIZE 命令并插入 2000 条新记录(因此,仍然存在 5000 条 + 2000 条新记录 = 总共 7000 条记录),MySQL 是否会将先前删除留下的可用空间用于新记录(意味着10010 kb 的 DB 大小不会改变)还是将新记录“附加”到 DB(这意味着文件系统上的 DB 大小将增长到,比如说,12010 kb)?

谢谢!:)

mysql disk-space-utilization database myisam
  • 1 个回答
  • 593 Views
Martin Hope
Nick
Asked: 2012-07-18 12:16:30 +0800 CST

MySQL 复制性能

  • 15

我在两台机器之间的 MySQL 5.5 复制性能方面遇到了一个严重的问题,主要是带有基于语句的复制的 myISAM 表。二进制日志和 mysql 数据目录都位于同一个 Fusion ioDrive 上。

这个问题是最近的一个大问题,当时我们需要暂停复制大约。3小时。在没有其他负载的情况下再次赶上大约需要 10 个小时。

10小时赶上

如何提高复制的性能?机器 B 基本上处于空闲状态(很少,IO,16 个内核中有 2 个已用尽,大量空闲 RAM),因为只有 1 个 mySQL 线程在写入数据。以下是我的一些想法:

  • 切换到基于行的复制。在测试中,这仅产生了 10-20% 的性能提升
  • 使用多线程复制升级到 mySQL 5.6。我们可以轻松地将数据拆分到单独的数据库中,基准测试似乎表明这会有所帮助,但代码似乎还没有准备好生产。
  • 一些有助于加快复制速度的配置变量

主要问题是,如果在暂停 3 小时后需要 10 小时才能赶上,这意味着复制正在 10 小时内写入 13 小时的数据,或者能够以传入数据速度的 130% 写入。我期待至少在不久的将来在 Master 机器上进行双写,因此迫切需要一种提高复制性能的方法。

机器A:

  • 掌握
  • 24GB内存
  • 1.2TB 融合 ioDrive2
  • 2 个 E5620
  • 千兆互连

my.cnf:

[mysqld]
server-id=71
datadir=/data_fio/mysqldata
socket=/var/lib/mysql/mysql.sock
tmpdir=/data_fio/mysqltmp

log-error = /data/logs/mysql/error.log
log-slow-queries = /data/logs/mysql/stats03-slowquery.log
long_query_time = 2
port=3306

log-bin=/data_fio/mysqlbinlog/mysql-bin.log
binlog-format=STATEMENT
replicate-ignore-db=mysql

log-slave-updates = true

# Performance Tuning
max_allowed_packet=16M
max_connections=500
table_open_cache = 2048
max_connect_errors=1000
open-files-limit=5000

# mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections
key_buffer=4G
max_heap_table_size = 1G
tmp_table_size = 4G
myisam_sort_buffer_size = 256M
sort_buffer_size=4M
read_buffer_size=2M
query_cache_size=16M
query_cache_type=2
thread_concurrency=32

user=mysql

symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
socket=/var/lib/mysql/mysql.sock

[client]
socket=/var/lib/mysql/mysql.sock

机器 B:

  • 奴隶
  • 36GB内存
  • 1.2TB 融合 ioDrive2
  • 2 个 E5620
  • 千兆互连

my.cnf:

[mysqld]
server-id=72
datadir=/data_fio/mysqldata
socket=/var/lib/mysql/mysql.sock
tmpdir=/data_fio/mysqltmp

log-error = /data/logs/mysql/error.log
log-slow-queries = /data/logs/mysql/stats03-slowquery.log
long_query_time = 2
port=3306

# Performance Tuning
max_allowed_packet=16M
max_connections=500
table_open_cache = 2048
max_connect_errors=1000
open-files-limit=5000

# mem = key_buffer + ( sort_buffer_size + read_buffer_size ) * max_connections
key_buffer=4G
max_heap_table_size = 1G
tmp_table_size = 4G
myisam_sort_buffer_size = 256M
sort_buffer_size=4M
read_buffer_size=2M
query_cache_size=16M
query_cache_type=2
thread_concurrency=32

user=mysql

symbolic-links=0

plugin-load=archive=ha_archive.so;blackhole=ha_blackhole.so

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
socket=/var/lib/mysql/mysql.sock

[client]
socket=/var/lib/mysql/mysql.sock
performance mysql replication myisam
  • 3 个回答
  • 7128 Views
Martin Hope
ananthan
Asked: 2012-05-11 01:36:56 +0800 CST

为什么 MySQL 使用这么多临时表?

  • 5

任何配置错误都会导致 mysql..mysql 调谐器显示创建太多临时表吗

Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk


table_open_cache = 125 tables
table_definition_cache = 256 tables

You have a total of 97 tables

You have 125 open tables.

Current table_cache hit rate is 3%

较早的临时表是,of the 23725 temp tables 38% were created on disk但我从 16m 更改max_heap为tmp_table200m,它降低到 30%。

engine myisam 
group_concat_max_len = 32768
key_buffer_size = 3.7 GB,
thread_stack = 256k,
table_cache = 125
query_cache_limit = 1M
query_cache_size = 16M
join_buffer_size = 2.00 M

max_connections = 800

显示另一个具有默认配置的系统 of 23725 temp tables, 1% were created on disk

但是我尝试在有这个问题的机器上更改为默认值,它仍然显示Of 580 temp tables, 16% were created on disk

我正在使用 Ubuntu 11.4 64 位和 48 GB 内存...任何人都可以提出解决方案吗?

使用“group by”将数据库引擎从 myisam 更改为表上的内存是否可以修复此问题?

mysql memory innodb myisam
  • 2 个回答
  • 7720 Views
Martin Hope
Artem
Asked: 2010-04-13 10:10:39 +0800 CST

使用 myISAM 和 innoDB 表制作实时 mySQL 数据库的快照,无需锁定

  • 0

我们有一个生产中的实时数据库,我们的服务器空间不足。所以我想在没有任何停机时间(或尽可能少的停机时间)的情况下转移到新服务器。一般来说,我还希望有一个可用的数据库热故障转移副本。

我想使用复制将所有数据复制到新机器上,然后在某个时候拨动开关,让新机器成为主机器(正常的故障转移场景)。我的问题是我不确定如何在不锁定数据库的情况下初始化复制以制作我将使用的初始快照?有没有办法做到这一点?我知道如果我使用的是 innoDB,我可以使用单事务来做到这一点,但非常不幸的是,我们有一些 myISAM 表(实际上最大的 150GB 表是 myISAM,我想将它切换到 InnoDB,但我不能这样做直到我有更多空间和一个热副本可以切换到)。

有任何想法吗?有没有办法制作这样的快照?或者是否有另一种方法可以让复制“赶上”而无需初始化快照?

mysql replication snapshot myisam
  • 1 个回答
  • 1761 Views
Martin Hope
jack
Asked: 2010-01-19 19:25:35 +0800 CST

innodb 表的行号

  • 0

将表从 MyISAM 转换为 InnoDB 后,“show table status”命令返回不同的行号以正确显示“count(*)”命令。这可能是由于 InnoDB 表中使用的紧凑行格式。

我想知道是否有一种方法可以通过“显示表状态”命令快速获取 InnoDB 引擎上所有表的正确行号,就像它为 MyISAM 表显示的一样。

mysql count myisam
  • 1 个回答
  • 483 Views
Martin Hope
IanMulvany
Asked: 2009-08-01 07:14:37 +0800 CST

检查从主服务器复制的 MySQL 从服务器的状态的最佳方法是什么?

  • 3

具体来说,我有一组 InnoDB 表,我们将它们备份到 MyISAM 表中以提供全文搜索。从属数据库通常落后于主数据库。我正在寻找有关可用于跟踪滞后的诊断或命令的建议。两台机器都在同一个网络上。非常感谢。

mysql replication innodb myisam
  • 2 个回答
  • 919 Views
Martin Hope
Tony Meyer
Asked: 2009-05-01 01:19:33 +0800 CST

如何选择 MySQL 数据库引擎

  • 16

特别是,当两者都没有缺少必需的功能(例如,您不需要外键)时,您如何在 MyISAM 和 InnoDB 之间进行选择。

它总是归结为尝试和测量吗?或者是否有关于读写次数和频率以及其他类似措施的良好经验法则?表的大小对典型选择有影响吗?

mysql innodb myisam
  • 5 个回答
  • 3341 Views

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve