mysql - sql : Side effects of creating/deleting databases and tables on the fly

标签 mysql sql database

我需要通过在 mysql 上创建包装器来模拟 sql(客户要求:P),因此我的应用程序需要在运行时创建/删除表(可能还包括数据库)。

此类创建/删除操作的频率不会很高。我不是数据库专家,但我相信此类操作从长远来看可能会导致一些副作用。

是否建议继续创建/删除数据库?我可能会遇到哪些复杂情况?

最佳答案

这只是两种情况下的问题

场景 #1

对于 InnoDB 表,innodb 缓冲池应最佳设置为构成 InnoDB 表的所有数据页和索引页的总和。

更糟糕的是 innodb_file_per_table 被禁用(默认)

这将生成一个名为/var/lib/mysql/ibdata1 的文件,该文件可以增长并且永不收缩。无论您删除和创建数据库多少次,情况都是如此。

如果忘记在/etc/my.cnf 中进行必要的更改,这也可能导致 innodb 缓冲池利用率不足,直到数据填满为止。

对 InnoDB 进行的更改非常简单。

运行此查询

SELECT CONCAT(KeyBuf,'M') BufferPoolSetting FROM (SELECT CEILING(SumInnoDB/POWER(1024,2)) KeyBuf FROM (SELECT SUM(data_length+index_length) SumInnoDB FROM information_schema.tables WHERE engine='InnoDB' and table_schema NOT IN ('information_schema','mysql')) A) AA;

在删除所有数据库并创建新数据库之前,应将此查询的输出用作/etc/my.cnf 中的 innodb_buffer_pool_size。

场景#2

对于 MyISAM 表,键缓冲区应最佳设置为所有 .MYI 文件的总和。

如果忘记在/etc/my.cnf 中进行必要的更改,这也可能导致 MyISAM key 缓存( key 缓冲区)利用率不足,直到数据填满为止。

对 MyISAM 进行的更改非常简单。

运行此查询

SELECT CONCAT(KeyBuf,'M') KeyBufferSetting FROM (SELECT CEILING(SumIndexes/POWER(1024,2)) KeyBuf FROM (SELECT SUM(index_length) SumIndexes FROM information_schema.tables WHERE engine='MyISAM' and table_schema NOT IN ('information_schema','mysql')) A) AA;

在删除所有数据库并创建新数据库之前,应将此查询的输出用作/etc/my.cnf 中的 key_buffer_size。

关于mysql - sql : Side effects of creating/deleting databases and tables on the fly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087024/

相关文章:

java - 从 MySQL 添加行时更改 JTable 的整个行颜色

php - 使用PHP将HTML表单数据插入MySQL数据库

MySQL 嵌套联合替代方案

sql - 为什么我会收到 "Unknown Column"错误?

sql - 如何编写 PL/SQL 在插入之前先检查记录是否存在

mysql - 从日期和时间值位于单独列中的表中选择

python - 不断从 celery worker 那里检索结果

用于检查两个大写字母后跟数值的 SQL 约束

ruby-on-rails - rails : two models for one table

mysql 手动递增 ids?