我需要通过在mysql上创建一个包装器来模拟sql(客户需求:P),因此我的应用程序需要在运行时创建/删除表(以及可能的数据库)。
此类创建/删除操作的频率不会很高。我不是数据库专家,但我相信这样的操作可能会导致长期的一些副作用。
建议继续这些数据库的创建/删除以及我可能遇到的可能的并发症是什么?
答案 0 :(得分:1)
这只是两种情况下的问题
情景#1
对于InnoDB表,innodb缓冲池应该最佳地设置为构成InnoDB表的所有数据pags和索引页的总和。
更糟糕的是,禁用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'和table_schema NOT IN('information_schema','mysql'))A)AA;
在删除所有数据库并创建新数据库之前,此查询的输出应该用作/etc/my.cnf中的innodb_buffer_pool_size。
情景#2
对于MyISAM表,密钥缓冲区应最佳设置为所有.MYI文件的总和。
如果忘记在/etc/my.cnf中进行必要的更改,这也可能会使MyISAM密钥缓存(密钥缓冲区)暴露在利用率不足之前,直到数据填满为止。
对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。