Questions tagged «innodb»

InnoDB:MySQL的符合ACID的存储引擎

3
MySQL:读取通信数据包时出错
我在mysql中收到此警告, [Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets) 我已经浏览过Google的几个主题,并且根据一些建议,我max_allowed_packet从128 to 512 to 1024相同的行为中增加了兴趣。 我使用的Drupal 7,和是有很多BLOB数据类型的,但1024 Mb的max_allowed_packet应该是足够的在我看来。 任何其他解决方法如何克服此警告? 编辑: 添加了一些设置作为@Rolando的建议/答案,我仍然收到相同的警告。 我的mysql配置看起来像这样: [client] port = 3306 socket = /tmp/mysql.sock default-character-set = utf8 [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = …
14 mysql  innodb 

2
为什么MySQL在磁盘上创建了这么多临时表?
任何配置错误都能导致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% 较早的临时表是“在23725个临时表中,有38%是在磁盘上创建的”,但我将max_heap和tmp_table从16m更改为200m,并将其降低到30%。 组态: engine myisam …
13 mysql  innodb  myisam  memory 

2
如何从InnoDB表中删除碎片?
我有一个具有表数量的数据库。 我想从表中删除一些记录,说记录数超过20K或50K。 所有的表都是InnoDB。而且file_per_table是关闭。 当我从多个表中删除记录时,表中会出现碎片。 有什么方法可以消除碎片吗? 4月17日更新 mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0; +-----------------+--------------+-----------+ | TABLE_NAME | TABLE_SCHEMA | Data_free | +-----------------+--------------+-----------+ | City | world_innodb | 5242880 | | City_Copy | world_innodb | 5242880 | | Country | world_innodb | …

4
mysql int vs varchar作为主键(InnoDB存储引擎?
我正在构建一个Web应用程序(项目管理系统),并且在性能方面一直想知道这一点。 我有一个Issues表,里面有12个外键链接到其他各种表。在其中的8个中,我需要加入才能从其他表中获取title字段,以便使记录在Web应用程序中有意义,但是,这意味着进行8个加入似乎非常繁琐,尤其是因为我只是在拉入这些联接中的每个联接都有1个字段。 现在,出于永久性的原因,我还被告知要使用自动递增的主键(除非考虑到分片,在这种情况下我应该使用GUID),但是在性能上使用varchar(最大长度为32)有多糟糕?我的意思是,这些表中的大多数可能不会有很多记录(其中大多数应该在20以下)。另外,如果我使用标题作为主键,则不必在95%的时间内进行联接,因此对于95%的sql,我什至会发生任何性能下降(我认为)。我唯一能想到的缺点是我将拥有更高的磁盘空间使用率(但是一天下来确实是一件大事)。 我将查找表用于很多此类而不是枚举的原因是因为我需要最终用户可以通过应用程序本身配置所有这些值。 将varchar用作不包含很多记录的表的主键有什么弊端? 更新-一些测试 因此,我决定对此做一些基本测试。我有100000条记录,这些是基本查询: 基本VARCHAR FK查询 SELECT i.id, i.key, i.title, i.reporterUserUsername, i.assignedUserUsername, i.projectTitle, i.ProjectComponentTitle, i.affectedProjectVersionTitle, i.originalFixedProjectVersionTitle, i.fixedProjectVersionTitle, i.durationEstimate, i.storyPoints, i.dueDate, i.issueSecurityLevelId, i.creatorUserUsername, i.createdTimestamp, i.updatedTimestamp, i.issueTypeId, i.issueStatusId FROM ProjectManagement.Issues i 基本INT FK查询 SELECT i.id, i.key, i.title, ru.username as reporterUserUsername, au.username as assignedUserUsername, p.title as projectTitle, pc.title as ProjectComponentTitle, …

4
InnoDB行锁定-如何实现
我一直在四处逛逛,阅读mysql站点,但仍然看不到它是如何工作的。 我想选择结果并对其行锁定以进行写入,写入更改并释放锁定。audocommit已开启。 方案 id (int) name (varchar50) status (enum 'pending', 'working', 'complete') created (datetime) updated (datetime) 选择状态为待定的项目,然后将其更新为工作状态。使用排他性写入来确保同一物品不会被拾取两次。 所以; "SELECT id FROM `items` WHERE `status`='pending' LIMIT 1 FOR WRITE" 从结果中获取ID "UPDATE `items` SET `status`='working', `updated`=NOW() WHERE `id`=<selected id> 我是否需要做任何事情来释放锁,它是否像我上面所做的那样工作?
13 mysql  innodb  locking 

2
如何恢复文件被移动到的InnoDB表
所以我有一个在复制流上安装的测试数据库服务器。顾名思义,优化过程很快就被填补了从属数据目录上的空间。MySQL尽职尽责地只是在等待更多的空间。 该数据目录是仅用作mysql的数据目录的文件系统,因此没有其他可释放的内容。 我有一个4 gig innodb测试表,它不是复制流的一部分,所以我想尝试一些方法来查看它是否可以工作,并且作为测试环境,我不太担心事情出了什么问题。 这是我采取的步骤 弄丢了我要移动的桌子 在其上放置一个读锁(即使没有任何写入,并且不在复制流中) 将.frm和.ibd复制到带有一些备用空间的文件系统中 解锁桌子 删减了该表-释放了足够的空间以使优化完成,复制开始重新进行。 停止奴隶/关闭mysql 将文件从tmp中复制回数据目录 重启mysql .err日志中没有任何显示,一切看起来不错。我连接并使用mydb;并在显示表中查看我正在弄乱的表。但是,如果我尝试 select * from testtable limit 10; 我得到错误 ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist 从目前为止我所知道的,我可以从其他所有表中读取数据,并且复制开始备份而没有任何抱怨。 从这一点上我有什么办法可以恢复?如果需要,我可以从头开始重建它,但是很好奇其他人对该企业的总体看法。关于我采取的一系列步骤,如果没有更完美的结果,是否有任何结果? 如果这不是测试服务器,我不能只是“实时运行”并看看会发生什么?如果我愿意,最好的方法是暂时释放生产从属服务器上的空间?

2
INSERT是否自动提交?
我们的应用程序向MySQL数据库触发INSERT查询以添加记录。我想知道记录是否自动提交。如果我运行ROLLBACK命令,数据库何时执行回滚?提交后是否可以回滚?
13 mysql  innodb 


6
如何在MySQL中将列添加到大表
我是PHP开发人员,所以不要严格。我有一张大桌子〜5.5gb转储。我们的项目经理决定在其中添加新列以执行新功能。表是InnoDB,所以我尝试了什么: 使用表锁更改屏幕中的表。花了大约30个小时,什么也没有。所以我就停止了。首先,我犯了一个错误,因为我没有结束所有事务,但是第二次不是多重锁。状态为copy to tmp table。 由于我还需要对此表进行分区,因此我们决定进行转储,重命名并使用相同的名称和新的结构来创建表。但是转储正在严格复制(至少我没有发现其他东西)。所以我添加了一个新的转储列sed并进行查询。但是一些奇怪的错误开始了。我相信这是由字符集引起的。utf-8中的表和文件在之后成为us-ascii sed。所以我在30%的数据上遇到了错误(未知命令'\'')。所以这也是一个坏方法。 还有什么其他方法可以完成此操作并提高性能(我可以使用php脚本来完成,但是要花很多时间)。INSERT SELECT在这种情况下的性能如何。 感谢您的任何进步。
13 mysql  innodb 

4
MySQL InnoDB缓冲池实例的最佳数量
服务器特征 系统总内存:8GB(运行MySQL以及上面运行的MySQL以外的其他东西,即不专用于MySQL) CPU核心数:6 我在数据库中的数据量约为2GB 我将InnoDB缓冲池大小设置为4GB 哪个更好: Innodb缓冲池实例设置为1? Innodb缓冲池实例设置为2(每个实例2GB)? Innodb缓冲池实例设置为4(每个实例1GB)? Innodb缓冲池实例设置为8(默认设置) 因此,我不确定如何推理缓冲池实例,以及整个“在InnoDB缓冲池如此大的情况下使用实例或遭受OS交换”。


1
MySQL:事务会锁定行吗?
我以前没有尝试过使用MySQL事务,我只是想澄清一下。 如果两个用户在非常精确的时间执行查询,MySQL将如何处理呢?例如,用户正在尝试更新记录。 user1:更新表集column = column-4,其中column_id = 1; user2:更新表集column = column-7,其中column_id = 1; 现在,如果我使用事务,MySQL是否会选择首先执行哪个查询并锁定第二个用户,直到提交第一个查询?是表锁还是行锁? 如果第三位用户发出选择声明怎么办?MySQL将返回什么值? PS这将在Innodb上。

4
全文搜索导致“全文初始化”中花费大量时间
我目前正在尝试对Stack Overflow注释的数据转储运行一些查询。架构如下所示: CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) ) ENGINE=InnoDB …

1
梭子鱼和压缩的好处
一段时间以前,我一直在阅读有关MySQL的文件格式Antelope和Barracuda的信息,我想知道使用Barracuda和Compression是否可以受益。 我的服务器当前正在使用Antelope,因为它是MySQL的默认设置。 由于我拥有大型数据库,因此内存问题很多次了。我的数据库每天都在增加。 压缩似乎正在使一些人受益,例如:http : //www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/ 我知道内存和磁盘空间可能会更少,但是我不确定是否理解这一点(引自文章): “〜5%根据顶部的CPU负载(从80-100%主要等待I / O) 0.01通过主键的平均平均查找时间(转换之前的1-20秒)” 我以为这两件事不会改善,因为如果压缩了数据,则服务器必须解压缩才能再次获取原始数据,因此,CPU使用率会增加吗? 这对您的读/写密集型应用程序有好处吗?您会建议我改为梭子鱼和压缩吗? 您知道梭子鱼有什么问题吗? 以下问题的答案似乎指出了一些问题,但是由于它是从2011年开始的,所以我要说它们现在已经解决:https : //serverfault.com/questions/258022/mysql-innodb-how-to-switch梭子鱼格式

3
MySQL实例拖延“做SYNC索引”
问题 运行(主要是)一个带有InnoDB表的数据库的MySQL 5.6.20实例在1-4分钟的时间内偶尔出现所有更新操作的停顿,而所有INSERT,UPDATE和DELETE查询都保持“查询结束”状态。这显然是最不幸的。MySQL慢查询日志甚至记录了具有疯狂查询时间的最琐碎的查询,其中数百个具有相同的时间戳,对应于已解决停顿的时间点: # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', '1409573850'); 设备统计信息显示出增加了,尽管在此时间段内I / O负载没有过多(在这种情况下,根据上述语句的时间戳,更新停顿了14:17:30-14:19:12): # sar -d [...] 02:15:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.