[转帖]在华为服务器上测试运单表插入1亿条数据后查询一条数据的时间_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2542 | 回复: 0   主题: [转帖]在华为服务器上测试运单表插入1亿条数据后查询一条数据的时间        下一篇 
于泽勃
注册用户
等级:新兵
经验:72
发帖:2
精华:0
注册:2012-4-20
状态:离线
发送短消息息给于泽勃 加好友    发送短消息息给于泽勃 发消息
发表于: IP:您无权察看 2014-11-28 10:57:36 | [全部帖] [楼主帖] 楼主

在华为服务器上测试运单表插入1亿条数据后查询一条数据的时间

出现的问题:

1.上传mysql 安装包时掉线  

2.操作服务器时有很大的延迟

安装步骤:

准备环境:

RedHat 5系统、MySQL 5.6 rpm包

首先 上传mysql至服务器

1、 解压缩MySql

[root@www.linuxidc.com]# tar -xvf MySQL-5.6.2_m5-1.rhel5.i386.tar
MySQL-client-5.6.2_m5-1.rhel5.i386.rpm
MySQL-devel-5.6.2_m5-1.rhel5.i386.rpm
MySQL-embedded-5.6.2_m5-1.rhel5.i386.rpm
MySQL-server-5.6.2_m5-1.rhel5.i386.rpm
MySQL-shared-5.6.2_m5-1.rhel5.i386.rpm
MySQL-test-5.6.2_m5-1.rhel5.i386.rpm


2、 安装MySQL-server包

[root@www.linuxidc.com]# rpm -ivh MySQL-server-5.6.2_m5-1.rhel5.i386.rpm
error:Failed dependencies:
MySQL conflicts with mysql-5.0.45-7.el5.i386
MySQL-serverconflicts with mysql-server-5.0.45-7.el5.i386
(安装失败,由于系统先前安装有mysql,把它卸载掉!再安装)
[root@www.linuxidc.com]# rpm -e mysql-5.0.45-7.el5.i386 --nodeps
[root@www.linuxidc.com]# rpm -e mysql-server-5.0.45-7.el5.i386 –nodeps
[root@www.linuxidc.com]# rpm -ivh MySQL-server-5.6.2_m5-1.rhel5.i386.rpm
Preparing...        ########################################### [100%]
1:MySQL-server  ###########################################[100%]
[root@www.linuxidc.com]# rpm -ivh MySQL-client-5.6.2_m5-1.rhel5.i386.rpm
Preparing...          ########################################### [100%]
1:MySQL-client    ########################################### [100%]


3、 启动mysql并设置登录密码

[root@www.linuxidc.com]# /etc/init.d/mysql start
StartingMySQL......[  OK  ]
[root@shiyue5 u01]# mysqladmin -u rootpassword "123456"


***************************************************插入一亿条数据的思路***********************************************

1.求和

select
pow(2,0)+pow(2,1)+pow(2,2)+pow(2,3)+pow(2,4)+pow(2,5)+pow(2,6)+pow(2,7)+pow(2,8)+pow(2,9)+
pow(2,10)+pow(2,11)+pow(2,12)+pow(2,13)+pow(2,14)+pow(2,15)+pow(2,16)+pow(2,17)+pow(2,18)+pow(2,19);
select
pow(2,0)+pow(2,1)+pow(2,2)+pow(2,3)+pow(2,4)+pow(2,5)+pow(2,6)+pow(2,7)+pow(2,8)+pow(2,9)+
pow(2,10)+pow(2,11)+pow(2,12)+pow(2,13)+pow(2,14)+pow(2,15)+pow(2,16)+pow(2,17)+pow(2,18)+pow(2,19)+
pow(2,20)+pow(2,21)+pow(2,22)+pow(2,23)+pow(2,24);
select
pow(2,0)+pow(2,1)+pow(2,2)+pow(2,3)+pow(2,4)+pow(2,5)+pow(2,6)+pow(2,7)+pow(2,8)+pow(2,9)+
pow(2,10)+pow(2,11)+pow(2,12)+pow(2,13)+pow(2,14)+pow(2,15)+pow(2,16)+pow(2,17)+pow(2,18)+pow(2,19)+
pow(2,20)+pow(2,21)+pow(2,22)+pow(2,23)+pow(2,24)+pow(2,25)+pow(2,26);
select
pow(2,0)+pow(2,1)+pow(2,2)+pow(2,3)+pow(2,4)+pow(2,5)+pow(2,6)+pow(2,7)+pow(2,8)+pow(2,9)+
pow(2,10)+pow(2,11)+pow(2,12)+pow(2,13)+pow(2,14)+pow(2,15)+pow(2,16)+pow(2,17)+pow(2,18)+pow(2,19)+
pow(2,20)+pow(2,21)+pow(2,22)+pow(2,23)+pow(2,24)+pow(2,25)+pow(2,26)+pow(2,27)+pow(2,28)+pow(2,29);


2.表格式:一个主键,自增长(waybillno :运单号),一个varchar单列索引order_index(orderno :订单号),一个int单列索引service_index(servicetype :服务类型),一个两列的联合索引idtel_index(senderid :寄件人ID ,sendertel :寄件人电话 )

3.单行数据

INSERT INTO `ord_waybill` (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) VALUES ('1','1',1,'00000000000','00000000000','300270','北京市分拨中心');


4.更改表的主键和索引

alter table ord_waybill add index orderno_index(orderno);
alter table ord_waybill add index service_index (servicetype);
alter table ord_waybill add index idtel_index(senderid,sendertel);
show index from ord_waybill;


5.插入语句

1      2      34     5678
2-0     2-1    2-2


***********第一次***********

insert into ord_waybill (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) select waybillno+pow(2,0),orderno+pow(2,0),serviceType+pow(2,0),senderid+pow(2,0),sendertel+pow(2,0),destorgno,destorgname from ord_waybill;


***********第二次***********

insert into ord_waybill (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) select waybillno+pow(2,1),orderno+pow(2,1),serviceType+pow(2,1),senderid+pow(2,1),sendertel+pow(2,1),destorgno,destorgname from ord_waybill;


***********第26次  手动***********

insert into ord_waybill (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) select waybillno+pow(2,25),orderno+pow(2,25),serviceType+pow(2,25),senderid+pow(2,25),sendertel+pow(2,25),destorgno,destorgname from ord_waybill;


***********第27次  手动***********

insert into ord_waybill (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) select waybillno+pow(2,26),orderno+pow(2,26),serviceType+pow(2,26),senderid+pow(2,26),sendertel+pow(2,26),destorgno,destorgname from ord_waybill;


*********************************************************写出对应的存储过程******************************************************

delimiter $$
create procedure pro_yiyi()
begin
declare x int;
set @x=0;
ins:loop
if @x=27 then
leave ins;
end if;
insert into ord_waybill (waybillno,orderno,serviceType,senderid,sendertel,destorgno,destorgname) select waybillno+pow(2,@x),orderno+pow(2,@x),serviceType+pow(2,@x),senderid+pow(2,@x),sendertel+pow(2,@x),destorgno,destorgname from ord_waybill;
set @x=@x+1;
end loop ins;
end
$$
call pro_yiyi()$$
17:15


6.建表语句

CREATE TABLE `ord_waybill` (


  `WaybillNo` varchar(20) NOT NULL COMMENT '运单号',

  `OrderNo` varchar(50) DEFAULT NULL COMMENT '订单号',

  `ServiceType` int(11) DEFAULT NULL COMMENT '服务类型: 1--标准件; 2--精品件; 3--中港速递; 4--到付件; 5--COD件; 6--签单返还;; 7--内部发件; \r\n            ',

  `TimeType` int(11) DEFAULT NULL COMMENT '时效类型: 1--国内次晨达; 2--国内次日达; 3--国内隔日达; 4--同城当天件;5--区域当天件; 6--经济快递',

  `FromPlat` int(11) DEFAULT NULL COMMENT '来源平台:  0--网点线下揽收;1--App;  2--官网; 3--400; 4--VIP ;100--淘宝平台;  101--当当平台; 102--京东平台',

  `VATypeID` varchar(20) DEFAULT NULL COMMENT '多种增值服务用逗号隔开(到付款、代收货款、签单返回、保价)',

  `SenderNation` varchar(60) DEFAULT NULL COMMENT '寄件人国家',

  `SenderProvince` varchar(60) DEFAULT NULL COMMENT '寄件人省份',

  `SenderCity` varchar(60) DEFAULT NULL COMMENT '寄件人地市',

  `SenderDistrict` varchar(60) DEFAULT NULL COMMENT '寄件人区县',

  `SRegionCode` varchar(16) DEFAULT NULL COMMENT '寄件人区域代码',

  `SenderCompany` varchar(60) DEFAULT NULL COMMENT '寄件人单位',

  `SenderId` varchar(15) DEFAULT NULL COMMENT '寄件人ID',

  `Sender` varchar(60) DEFAULT NULL COMMENT '寄件人',

  `SenderTel` varchar(30) DEFAULT NULL COMMENT '寄件人电话',

  `SenderMobile` varchar(15) DEFAULT NULL COMMENT '寄件人手机',

  `SenderZip` varchar(6) DEFAULT NULL COMMENT '寄件人邮编',

  `SenderAddress` varchar(255) DEFAULT NULL COMMENT '寄件人地址',

  `SenderLocID` varchar(16) DEFAULT NULL COMMENT '改寄件人地址ID为地址库中的ID',

  `ReceiverNation` varchar(60) DEFAULT NULL COMMENT '收件人国家',

  `ReceiverProvince` varchar(60) DEFAULT NULL COMMENT '收件人省份',

  `ReceiverCity` varchar(60) DEFAULT NULL COMMENT '收件人地市',

  `ReceiverDistrict` varchar(60) DEFAULT NULL COMMENT '收件人区县',

  `RRegionCode` varchar(16) DEFAULT NULL COMMENT '收件人区域代码',

`ReceiverCompany` varchar(60) DEFAULT NULL,


  `ReceiverId` varchar(15) DEFAULT NULL COMMENT '收件人ID',

  `Receiver` varchar(60) DEFAULT NULL COMMENT '收件人',

  `ReceiverTel` varchar(30) DEFAULT NULL COMMENT '收件人电话',

  `ReceiverMobile` varchar(15) DEFAULT NULL COMMENT '收件人手机',

  `ReceiverZip` varchar(6) DEFAULT NULL COMMENT '收件人邮编',

  `ReceiverAddress` varchar(255) DEFAULT NULL COMMENT '收件人地址',

  `ReceiverLocID` varchar(16) DEFAULT NULL COMMENT '改收件人地址ID为地址库中的ID',

`DestOrgNo` varchar(16) DEFAULT NULL,
`DestOrgName` varchar(60) DEFAULT NULL,


  `Contents` varchar(255) DEFAULT NULL COMMENT '内件品名',

  `GoodNumber` int(11) DEFAULT NULL COMMENT '货品数量',

`GoodsValue` decimal(8,2) DEFAULT NULL,


  `CubageLong` decimal(10,3) DEFAULT NULL COMMENT '体积(长)',

  `CubageWild` decimal(10,3) DEFAULT NULL COMMENT '体积(宽)',

  `CubageHight` decimal(10,3) DEFAULT NULL COMMENT '体积(高)',

  `TCubage` decimal(10,3) DEFAULT NULL COMMENT '体积',

  `VWeight` decimal(10,3) DEFAULT NULL COMMENT '体积重量',

  `TWeight` decimal(10,3) DEFAULT NULL COMMENT '输入重量',

  `EWeight` decimal(10,3) DEFAULT NULL COMMENT '电子称重量',

  `FWeight` decimal(10,3) DEFAULT NULL COMMENT '计费重量',

  `TWeightCenter` decimal(10,3) DEFAULT NULL COMMENT '中心重量',

  `TWeightDelivery` decimal(10,3) DEFAULT NULL COMMENT '派件网点重量',

  `TPrice` decimal(8,2) DEFAULT NULL COMMENT '保价金额',

  `InsuranceRate` decimal(10,3) DEFAULT NULL COMMENT '保价率',

  `InsuranceFee` decimal(8,2) DEFAULT NULL COMMENT '保价费',

`UrgentFee` decimal(18,4) DEFAULT NULL,
`OthersFee` decimal(8,2) DEFAULT NULL,
`MiddleFee` decimal(18,4) DEFAULT NULL,


  `GoodsFlag` int(11) DEFAULT NULL COMMENT '文件或物品标记:0--文件; 1--物品',

  `SpecialRequire` int(11) DEFAULT NULL COMMENT '特别声明{二进制方式表达:无; 非禁寄品/易碎/加急/航空/其他的组合}',

  `AgencyFee` decimal(10,2) DEFAULT NULL COMMENT '代收款',

  `AgencyPFDay` int(11) DEFAULT NULL COMMENT '代收款结算周期:1--一天; 2--二天; 3--三天; 4--四天; 5--五天; 6--六天; 7--一周',

  `PaymentFlag` int(11) DEFAULT NULL COMMENT '付款方式:1--现金; 2--协议结算; 3--第三方付款',

  `ChargeFee` decimal(10,2) DEFAULT NULL COMMENT '资费',

  `TranspFee` decimal(10,2) DEFAULT NULL COMMENT '总运费',

  `TraType` int(11) DEFAULT NULL COMMENT '0:汽运;1:航空。。。。',

  `MakerId` varchar(12) DEFAULT NULL COMMENT '制单人ID',

  `Maker` varchar(60) DEFAULT NULL COMMENT '制单人',

  `MakerCenterId` varchar(10) DEFAULT NULL COMMENT '制单中心ID',

  `MakerDate` date DEFAULT NULL COMMENT '制单日期',

  `MakerTime` datetime DEFAULT NULL COMMENT '制单时间',

  `IsReturnReceipt` int(11) DEFAULT NULL COMMENT '是否有回执',

  `ReturnBillNo` varchar(20) DEFAULT NULL COMMENT '回单号',

  `IsElect` int(11) DEFAULT NULL COMMENT '是否电子面单: 0--印刷面单; 1--电子面单; ',

  `IsSOunt` int(11) DEFAULT NULL COMMENT '派件超区标识',

  `MainWayBillNo` varchar(20) DEFAULT NULL COMMENT '主单号',

  `StartWayBillNo` varchar(20) DEFAULT NULL COMMENT '起始子单号',

  `EndWayBillNo` varchar(20) DEFAULT NULL COMMENT '截止子单号',

  `Lng` varchar(20) DEFAULT NULL COMMENT '经度',

  `Lat` varchar(20) DEFAULT NULL COMMENT '纬度',

  `RecDate` date DEFAULT NULL COMMENT '揽件日期',

  `RecTime` datetime DEFAULT NULL COMMENT '揽件时间',

  `Remark` varchar(100) DEFAULT NULL COMMENT '备注',

  `Status` int(11) DEFAULT NULL COMMENT '状态',

PRIMARY KEY (`WaybillNo`)


) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='运单表';

7.查询语句

***********查询数据量***********

select count(1) from ord_waybill;


***********查询 主键waybillno***********

explain select * from ord_waybill where waybillno='12345678';
select * from ord_waybill where waybillno='12345678';
select * from ord_waybill limit 1;


***********查询 int型单列索引servicetype***********

explain select * from ord_waybill where servicetype=12345678;
select * from ord_waybill where servicetype=12345678;
select * from ord_waybill limit1;


***********查询 varchar型单列索引orderno***********

explain select * from ord_waybill where orderno='12345678';
select * from ord_waybill where orderno='12345678' \G;
select * from ord_waybill limit1;


***********查询 联合索引senderid,sendertel***********

explain select * from ord_waybill where senderid='12345677' and sendertel='12345677';
select * from ord_waybill where senderid='12345677' and sendertel='12345677';
select * from ord_waybill limit1;


***********查询 全表***********

explain select * from ord_waybill where destorgno='300270' limit1;
select * from ord_waybill where destorgno='300270'limit1;


explain select * from ord_waybill where destorgname='北京市分拨中心' limit 1;

select * from ord_waybill where destorgname='北京市分拨中心' limit 1\G;

select count(1) from ord_waybill;


8.遇到的问题

1).MySQL在RedHat上不能连接数据库,最后的解决方法是:安装所有的包,然后使用cat /root/.mysql_secret 使用系统产生的随机密码登录(必须这样写:mysql -uroot -p随机密码 右键 回车)

2).试图为主键更改为自增长类型,sql语句为:alter table tablename modify waybillno varchar(20) auto_increment primary key; 语法没什么问题但是不能为varchar类型设置为自增长

3).MySQL的安装语句使用rpm -ivh --replacefiles 安装包;可以正确安装,否则报错

ps:
MySQL-shared-compat-5.6.15-1.el6.i686.rpm # RHEL兼容包
MySQL-server-5.6.15-1.el6.i686.rpm # MySQL服务端程序
MySQL-client-5.6.15-1.el6.i686.rpm # MySQL客户端程序
MySQL-devel-5.6.15-1.el6.i686.rpm # MySQL的库和头文件
MySQL-shared-5.6.15-1.el6.i686.rpm # MySQL的共享库


4).报错:

ERROR 1206 (HY000): The total number of locks exceeds the lock table size


解决方法:  innodb_buffer_pool_size=512M

Mysql解决The total number of locks exceeds the lock table size错误 

网上google搜索相关问题,发现一位外国牛人这么解释:

If you're running an operation on a large number of rows within a table that uses the InnoDB storage engine, you might see this error:
ERROR 1206 (HY000): The total number of locks exceeds the lock table size
MySQL is trying to tell you that it doesn't have enough room to store all of the row locks that it would need to execute your query. The only way to fix it for sure is to adjust innodb_buffer_pool_size and restart MySQL. By default, this is set to only 8MB, which is too small for anyone who is using InnoDB to do anything.
If you need a temporary workaround, reduce the amount of rows you're manipulating in one query. For example, if you need to delete a million rows from a table, try to delete the records in chunks of 50,000 or 100,000 rows. If you're inserting many rows, try to insert portions of the data at a single time.


原来是InnoDB表执行大批量数据的更新,插入,删除操作时会出现这个问题,需要调整InnoDB全局的innodb_buffer_pool_size的值来解决这个问题,并且重启mysql服务。

查看当前数据库存储引擎,在创建时使用 ENGINE=InnoDB类型。

默认的innodb_buffer_pool_size=8M

查询命令是:show variables like '%buffer%';

解决办法:在RedHat中的shell界面中配置/etc/my.ini

设置:innodb_buffer_pool_size=512M

5).如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:

TABLE_SCHEMA : 数据库名

TABLE_NAME:表名

ENGINE:所使用的存储引擎

TABLES_ROWS:记录数

DATA_LENGTH:数据大小

INDEX_LENGTH:索引大小

查看硬盘使用情况:df

6).redhat 快速查找文件:find / -name 你要找的文件(my.cnf)

Linux 中 mysql 的配置文件 在/etc/my.cnf 

Windows中 mysql 的配置文件 在my.ini

7).查看Redhat版本的命令:cat /etc/redhat-release

查看核心版本:cat /proc/version

查看系统位数:arch

8).查看端口开启情况:netstat -nat

9).将表中已有数据插入到表中:insert into tablename (字段名)select 相应的字段名 from tablename   千万注意select前没有from

10).mysql 添加用户组:groupadd  mysql

           添加用户到组:useradd -g mysql mysql

11).检查原系统是否已经安装MysQL相关软件:

rpm -qa |grep -i mysql


12).在Redhat里,解压ZIP文件:uzip 文件名.zip

13).mysql 修改data和sock路径:

    MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:

  1、home目录下建立data目录

cd /home
mkdir data


  2、把MySQL服务进程停掉:

mysqladmin -u root -p shutdown


  3、把/var/lib/mysql整个目录移到/home/data

mv /var/lib/mysql /home/data/


  这样就把MySQL的数据文件移动到了/home/data/mysql下

  4、找到my.cnf配置文件

  如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:

[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf


  5、编辑MySQL的配置文件/etc/my.cnf

  为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:

vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之)
# The MySQL server
[mysqld]
port   = 3306
#socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
socket  = /home/data/mysql/mysql.sock   (加上此行)


  6、修改MySQL启动脚本/etc/init.d/mysql

  最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。

[root@test1 etc]# vi /etc/init.d/mysql
#datadir=/var/lib/mysql    (注释此行)
datadir=/home/data/mysql   (加上此行)


  7、重新启动MySQL服务

/etc/init.d/mysql start


  或用reboot命令重启Linux

  如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。

14)linux 中 /dev/shm目录的注意:由于服务器分配了369G的空间,把MySQL所有的数据放在里面,但是他居然是个虚拟内存,重启后什么都没有了,什么都没有啦!!!!

默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录。可以通过df 命令查看结果.

/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。 

tmpfs有以下优势: 

1。动态文件系统的大小,/dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的 

2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。 
3。tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论