小编jer*_*ole的帖子

为什么TRANSACTION/COMMIT使用PHP/MySQL(InnoDB)提高了性能?

我一直在导入大量CSV数据文件; 通常少于100,000条记录.我正在使用PHP和MySQL(InnoDB表).我需要使用PHP来转换某些字段并在MySQL之前进行一些文本处理INSERT(process_note_data()下面代码的一部分).MySQL LOAD DATA是不可行的,所以请不要建议.

我最近尝试使用START TRANSACTION和使用MySQL事务来提高此过程的速度COMMIT.性能提升令人惊讶.处理时间减少了20倍.因此,20分钟的处理只需要大约1分钟.

质询.

1.)有谁理解为什么有这样的性能提升(20分钟到1分钟)?

2.)我应该关注10万条记录的交易量有多大?

3.)我是否应该关注交易中的大量插入和/或更新?

/*
 * Customer Notes Data:
 * Rows are either a meeting, call or note!
 */
$row = 1;
$data = array();
$fields = array();
$line = '';

$db->query('SET autocommit=0;');
$db->query('START TRANSACTION;');

if (($handle = fopen("modules/".$currentModule."/Data/customernote.csv", "r")) !== FALSE) {
  while (($data = fgetcsv($handle, 4096, ',', '"')) !== FALSE && $row < 999000) {
    //Row 1 - CSV header row with field …
Run Code Online (Sandbox Code Playgroud)

php mysql csv innodb transactions

32
推荐指数
2
解决办法
3万
查看次数

如何像MyISAM一样快速地将数据导入InnoDB表

我是MySQL的新手,我对它知之甚少.

我面临的问题如下所述:

以前我的数据有MyISAM作为它的MySQL引擎,过去需要大约15分钟才能在任何机器上导入.但是,当我将引擎更改为InnoDB时,需要花费大约90分钟才能在任何机器上导入.请建议我同样的.

mysql myisam innodb

6
推荐指数
1
解决办法
2750
查看次数

当表增长时,InnoDB行大小呈指数级变化?

我有一个巨大的InnoDB表,有三列(int,mediumint,int).在innodb_file_per_table设置上,并且只有一个PRIMARY KEY头两列的

表模式是:

CREATE TABLE `big_table` (
  `user_id` int(10) unsigned NOT NULL,
  `another_id` mediumint(8) unsigned NOT NULL,
  `timestamp` int(10) unsigned NOT NULL,
  PRIMARY KEY (`user_id`,`another_id `)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

MySQL版本是5.6.16

目前我每秒多插入超过150行.没有删除,也没有更新.没有重大的回滚或其他事务中止,这将导致浪费的空间使用.

MySQL在该表上显示计算出的大小为75,7GB.

光盘上的.ibd大小:136,679,784,448字节(127.29 GiB)

计数行:2,901,937,966(每行47.10字节)

2天后,MySQL在该表上显示的计算大小为75.7 GB.

光盘上的.ibd大小:144,263,086,080字节(135.35 GiB)

计数行:2,921,284,863(每行49.38字节)

跑步SHOW TABLE STATUS表显示:

Engine | Version | Row_format | Rows       | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Collation 
InnoDB |      10 | Compact    | 2645215723 |             30 | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb primary-key mysql-5.6

5
推荐指数
1
解决办法
659
查看次数

MySQL/InnoDB和长时间运行的查询

在使用myisam引擎运行查询时,因为它不是事务性的,所以长查询(据我所知)不会影响其他查询的数据.

在InnoDB中,它警告的一件事是避免长时间的查询.当InnoDB快照时,是否会快照一切?

我之所以这么说是因为:无论出于什么原因,查询都会花费比平时更长的时间并最终回滚.同时,其他200个用户已将行更新或插入数据库.当长查询回滚时,它是否还删除其他用户所做的更新/插入?或者是涉及其他用户安全的行,除非他们越过那些被回滚的行?

mysql sql innodb

4
推荐指数
1
解决办法
2048
查看次数

mysod会在innodb上为'load data infile'发出什么锁?

我在LOAD DATA INFILEInnoDB表上使用,我看到"系统锁定"状态SHOW PROCESSLIST.在这种情况下,InnoDB究竟锁定了什么?如何查看锁定的内容?

innodb locking

4
推荐指数
1
解决办法
4136
查看次数

Django与连接表特定字段有很多很多关系

我正在将我的应用程序迁移到Django并使用他们的内置ORM而不是编写SQL查询.我遇到的问题是与我的多对多关系中的一个.我有以下型号:

class Orgs(models.Model):
    org = models.AutoField(primary_key=True)
    org_name = models.CharField(max_length=45, null=False)
    org_hood = models.CharField(max_length=60, null=False)
    creation_date = models.DateField(auto_now_add=True)

class Members(models.Model):
    member_ID = models.AutoField(primary_key=True)
    user = models.OneToOneField(User)
    nick_name = models.CharField(max_length=20, null=False)
    is_self_managed = models.BooleanField(default=True)
    orgs = models.ManyToManyField(Orgs, null=True)
Run Code Online (Sandbox Code Playgroud)

有许多组织和许多成员.成员可以是许多组织的一部分,组织可以有许多成员.每个成员都有一个余额(0.00美元)与他们所属的组织相关联.例如:

member1 is in Org1 with a balance of $3.85
member1 is in Org2 with a balance of $2.00
member2 is in Org1 with a balance of $0.85
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何定义这个平衡字段.当我没有使用ORM时,我手动创建了连接表,并在连接表中定义了我需要的这些字段.

django orm many-to-many django-models

1
推荐指数
1
解决办法
1248
查看次数

InnoDB 中撤消日志的大小是固定的还是随 iblogfiles 的大小而变化?重做又怎样?

Jeremy Cole 的演讲《InnoDB:核心之旅 II》似乎表明有 128 个插槽,每个插槽可以有 1024 个事务。因此,我将记录在日志文件中的更新硬性限制为 2^17 次。

我正在寻找一种方法来从 ibdata1 和 ib_logfile[01] 文件中的撤消和重做日志轮换更新。如果我可以静态地或从配置动态地确定撤消和重做日志条目的最大数量是多少,那么我可以强制对系统进行大量更新,从而轮换出我试图删除的数据文件。

如果 Jeremy Cole 可以从字面上理解,则 131,072 次更新应该轮换出记录中列的原始值。或者比这更复杂?

mysql innodb

0
推荐指数
1
解决办法
3020
查看次数