命令行工具可以比你的Hadoop集群快235x倍

介绍

当我在浏览网页关注一些我定期访问网站的更新时,我发现Tom Hayden的一篇很酷的文章,使用Amazon Elastic Map Reduce(EMR)和mrjob,以计算从millionbase archive下载的象棋游戏的输赢率,慢慢地从中发现乐趣。由于数据量仅约为1.75GB,含200万左右的国际象棋游戏,我不确定他为何使用Hadoop,但我能理解他的目标,从mrjob和EMR中学习并获得乐趣。既然问题基本上只是看每个文件的resultl lines和汇总不同的结果,似乎非常适合shell命令的流处理。我试着用相同的数据量处理,我的笔记本电脑得到结果只需12秒左右(处理速度约为270MB /秒),而Hadoop处理了约26分钟(处理速度约1.14MB /秒)。

在报告用7 c1. machine在集群中处理数据所需要的时间为26分钟,汤姆写到:“这可能比在我的机器上按顺序运行快,但如果我做了一些聪明的本地多线程应用程序可能更好。”

[Read more…]

给Oracle开发者和DBA上的MongoDB课程

mongodb课程

 

给Oracle开发者和DBA上的MongoDB课程

老刘花了6个月时间学习mongodb,尝试把学习oracle的方法和精神用到学习mongodb nosql上,来听听老刘的心得

报名地址: http://t.cn/R2B1GKU

学习目标
MongoDB For Oracle DBA和开发者

  • 了解MongoDB的历史和特点
  • MongoDB与Oracle特性比较
  • MongoDB与Oracle学习曲线比较
  • MongoDB学习方法推荐

课程目标:

  • 了解MongoDB的历史和特点
  • MongoDB与Oracle特性比较
  • MongoDB与Oracle学习曲线比较
  • MongoDB的历史和特点学习方法推荐

 

课程特色:maclean liu老刘花了6个月时间学习mongodb,尝试把学习oracle的方法和精神用到学习mongodb nosql上,来听听老刘的心得

适用人群:对mongodb不了解的任何人

优惠方式:免费

 

 

Oracle PRM-DUL使用経験

 

前の数日にPRM-DULで(http://www.parnassusdata.com/)お客様のOracleデータベースをリカバリした。

その中に、あるユーザーはraid-5のストレージ陣列によって、ディスクがかなりひどく壊された。バックアップがあるがあるが、テストにパースできなかった。Oracleデータベースをリカバリする途中に、大量なundo損害トラブルが起こっている。しかも、システムテーブルのシステムロールバックセグメントで起こった。残っているのは十ヶ月前のバックアップしかない。

もうひとりのエンジニアと協力し、壊されたストレージシステムから、二つのOracleデータベースをリカバリしてみた。そのなかの一つのデータベースに対して、PRM-DULはそのシステムテーブルスペースのデータディクショナリーを読み取れる。損害がかなり深刻であったが、データディクショナリー自身には何のトラブルもない。もう一つのデータベースのシステムスペースには損害があったが、PRM-DULのディクショナリーモードでリカバリしてみたが、非ディクショナリーモードに転じた。

十ヶ月前に、一部のrmanバックアップによって、十ヶ月前のシステムデータファイルでデータディクショナリーを再構造できる。けど、十ヶ月前のデータがちょっとした問題点があるので、最後に非ディクショナリーモードを採用せざるを得なかった。これで、テーブルの名前、列のセグメントの名前、及び列のセグメントのタイプなどを当てる必要がある。もし、ユーザー側が業務に詳しい業務員の協力を得られなければ、Oracle技術者だけでは、かなり工夫をかけるので、人工費が高くなる。

 

最後にほぼ100%にデータをリカバリできた。データディクショナリーがある場合に対して、TAB$のNUM_ROWSを参考し、各テーブルの行数を確認すれば、どれほどのデータがなくしたことが明白になる。

 

PRM-DULなら、論理的にすべてのデータをリカバリできるが、このケースには一部のデータファイルのブロックが物理的に壊滅されたため、100%にリカバリできなかった。ここでは、あえてもう一度言う、本当に大切なデータであれば、きちんとバックアップしてください。

 

 

 

【MySQL学生手册】MySQL的安装

MySQL数据库服务的推荐安装方法是通过MySQL网站直接下载安装。这种方法在一些不同的平台上都有支持,仅在不同的平台上的安装细节上略有不同。然而,其主要步骤都一样。请注意你需要管理好权限设置以完成此安装。

 

对于在Windows和Linux操作系统上的安装步骤如下:

MySQL ServerWindows操作系统上的安装

1)访问MySQL官网下载页http://dev.mysql.com/downloads/

2)找到对应主题: MySQL on Windows -> MySQL Installer

3)下载my-installer-community MSI版本

4)双击下载的MSI文件,启动MySQL Installer, 选择Custom安装模式后,选择对应MySQL Server组件。

5)Next后按提示进行一步步安装,你需要提供相应root密码。

6)默认安装目录为:C:\Program Files\MySQL\MySQL Server 5.x

7)完成安装时会有提示信息告知。

 

MySQL ServerLinux操作系统上的安装:

1)访问MySQL官网下载页http://dev.mysql.com/downloads/

2)找到对应主题MySQL Community Downloads -> MySQL Community Server (GPL)

3)找到对应操作系统并下载最新二进制tar包(这里举例Linux-Generic), 如:

mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

4)将tar包解压至/usr/local目录下(如果tar包在/tmp目录下)

# cd /usr/local
# tar -zxvf /tmp/mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

5)对目录建立软链接

# ln -s mysql-5.6.25-linux-glibc2.5-x86_64 mysql

6)安装系统表

# cd mysql
# scripts/mysql_install_db

7)建立mysql系统用户及用户组

# groupadd mysql
# useradd -g mysql mysql

8)修改data目录所有者

# chown -R mysql:mysql data

9)可选操作,将启动脚本拷贝到/etc/init.d下

# cp support-files/mysql.server /etc/init.d/mysql.server

 

3.2.1 时区表的数据导入

MySQL的安装过程中会在mysql数据库(/data/mysql)下建立一组时区表(对应表文件time_zone*):

  • 在Windows上,这些表是作为预先初始化的mysql数据库中一部分存在的。
  • 在Unix上,这些表是在RPM安装中自动执行或tar包解压后手工执行mysql_install_db脚本时被建立的。

 

MySQL Server使用时区表来实现对如’Europe/Warsaw’等命名时区的支持。然而,时区表在建立后为空表,并没有数据。这意味着默认情况下,命名时区不可用。为了启用此功能,你必须对这些表导入数据。这是一个可选配置过程,除非你进行配置,否则时区支持将被限制为SYSTEM时区且时区偏移值也将受当前系统限制如’+08:00’。

在操作系统上有其自有的时区文件,最好是使用它们来导入MySQL时区表,以保证系统和MySQL时区基于相同的信息。许多Unix系统上有这些文件,它们常被放置在/usr/share/zoneinfo目录中。对于这些系统,可以使用mysql_tzinfo_to_sql程序来将这些文件内容转换为SQL语句并导入到MySQL表中。如果文件在/usr/share/zoneinfo目录中,使用命令如下:

# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -uroot mysql

有些系统中没有时区文件,如Windows和HP-UX。对于这中情况,MySQL在http://dev.mysql.com/downloads/timezones.html上提供了对应版本的时区表文件(MyISAM表文件)。你可以对应版本下载后在你的mysql数据库中替换空的时区表文件即可。停止MySQL Server,将解压后的文件拷贝至/data/mysql数据库目录中,重启服务。

 

Oracle Linux UEK 的性能验证

  • Unbreakable Enterprise Kernel 相关公开主页
    • Fast, Modern, Reliable: Oracle Linux
    • September 2011
    • http://www.oracle.com/us/technologies/linux/uek-for-linux-177034.pdf

 

UEK R1(2.6.32base)的改良点(WP开始)

 

功能 内容 从执行这次Oracle Database 的性能测试的角度来考虑
Latest Infiniband Stack(OEFD) 1.5.1 Infiniband的改善 不考虑(Infiniband无法准备)
Receive Packet Steering and Receive Flow Steering 可以在多个CPU中分散网络接收信息的软分割处理 大量发生网络接收信息的操作

UEK R1的默认的CPU mask中,1个NICdevice的softirq处理为偏向1个CPU

Advanced support for large NUMA system irqbalance处理为同一NUMA节点内

通过改善semaphore可以减少runqueue锁定竞争

进程较多 时的性能
IO affinity IO需求完成,在执行需求的CPU中执行 默认on/device的设定

large NUMA system中效果较好

Improved asynchronous writeback performance 改善kernel page cache的写回处理 是否与使用Direct IO的Oracle Database有关
SSD detection 如果检测到是SSD的话,就变更IO Scheduling 作为Database Smart  Flash Cache来使用SSD
Task Control Group 可以制成用户定义的进程的group 不考虑
Hardware fault management AER kernel driver可以记录PCIe的错误

MCE可以记录CPU/Memory的错误

不考虑 (无法再现HW的故障)
Power management features UEK变成了tickless kernel

SATA的low-power mode

不考虑
Data integrity features T10 Protection Information(T10-PI) 不考虑 (无法准备对应存储)
Oracle Cluster File System 2 OCFS2 v1.6 功能扩展 不考虑 (使用ASM)
Latencytop 可以观测到怎样的信息
New fallocate() system call 文件系统上的区域予約 不考虑

 

功能 内容 以执行这次的Oracle Database 的性能测试的角度来看的话
IO scheduler UEK的默认变更为deadline 2.6.32默认为cfq(RHEL5兼容内核也是cfq)

是否影响IO性能

Process Scheduler等 从2.6.18到2.6.32的upstream kernel的改良 多CPU核心/线程,多进程中的操作

 

UEK R1中值得注意的功能以及Oracle Database的测试模式

uek_for_oracle

 

Oracle Linux 6 性能测试

  • Oracle Linux 6 上的 Oracle Database 的操作在2012年3月23日时被certify了
    • 仅限UEK R1,Redhat Compatible Kernel(RHEL兼容内核)
    • UEK R2在2012年5月21日被certify
  • Oracle Linux 6.2 (x86-64)
    • Unbreakable Enterprise Kernel R1 (Linux 2.6.32base)
    • Unbreakable Enterprise Kernel R2 (Linux 3.0.16base)
      • uname  2.6.29
    • Redhat Compatible Kernel(Linux 2.6.32base)
  • Oracle Database 11g Release 2 (R 11.2.0.3)
    • Oracle Linux 6中被 certify的仅限R 11.2.0.3以后

 

Oracle Linux 6 性能测试

  • 网络接收信息的改良
    • Ethernet device的接接收信息息的队列
      • 单一队列以及多队列
    • Receive Packet Steering 以及 Receive Flow Steering
      • 软件模拟多队列
      • Linux 2.6.35 开始Back port
  • Flash Memory 的活用
    • Oracle Database Smart Flash Cache
    • (Oracle Linux 6 中的 Flash Cache的有效化)
      • Fusion-io 制 Flash Memory的device驱动
      • Oracle Linux 6 用 Smart Flash Cache 补丁

 

OS进程/线程(一般情况)

  • 程序就是以进程/线程为単位进行抽象化
    • OS进程/线程的总量即使CPU核心非常多的时候也可以操作
    • OS的进程/线程日程表可以决定用那些进程/线程,以几个CPU核心来执行

os调度

 

 

 

 

 

 

 

 

 

 

 

  • 程序就是以进程/线程为単位进行抽象化
    • OS进程/线程的总量即使CPU核心非常多的时候也可以操作
    • OS的进程/线程日程表可以决定用那些进程/线程,以几个CPU核心来执行
    • CPU核心增加的话,当即也会使得CPU上可以执行的进程,线程也增加

uek_for_oracle1

 

增加CPU核心(一般情况)

  • 增加可以同时操作的OS进程/线程
    • 增加响应的吞吐量上限
    • 将响应时间保持在一定左右以下,增加同时需求数量

 

uek_for_oracle2

 

  • 增加CPU核心
    • 为了增加CPU的数据消費能力
    • 也必须增加对CPU的数据供給能力
  • 性能最差的因素会压制整体的性能
    • 数据库服务器中,存储子系统经常会出现瓶颈
    • 实际上,根据不同情况,导致瓶颈的因素也不同

uek_for_oracle3

 

  • Network Interface Card 自身的接接收信息息队列
    • 作为OS的内部操作,1个网络接收信息队列的「软分割处理的一部」负责1个CPU
    • CPU饱和的话,网络接收信息处理功能也会饱和

uek_for_oracle4

 

单一队列NIC的问题

  • 网络接收的软分割处理由一个CPU负责
    • CPU饱和的话,网络接收处理功能也会饱和
      • 即使NIC的硬件带宽下降了
      • 即使其他CPU使用率有富余

 

  • OS内部的网络接收的软分割处理
    • 由一个CPU负责的话,就会在接收大量packet时,饱和
    • 通过多核心化增加1台的服务器拥有的CPU核心数量
      • 1台可以处理的需求数量应该也会增加,但是……

uek_for_oracle5

 

 

Ethernet NIC 的接收信息队列的改良

  • 单一队列 NIC
    • 台式电脑用 / 笔记个电脑用

 

  • 硬件的多队列 NIC
    • Receive-Side Scaling (RSS)
    • 用于接收大量的网络packaet
    • 服务器用NIC

 

  • 在模拟软件中模拟多队列 NIC
    • Receive Packet Steering (RPS)
    • Linux kernel 2.6.35安装的功能
      • UEK R1 (2.6.32base) 也安装了

 

网络接收信息处理的硬件的改良

  • Receive-Side Scaling (RSS)
    • NIC自身拥有多个队列
    • 用多个CPU分担接收信息时的软分割处理

uek_for_oracle6

 

 

  • NIC芯片自身有多个队列
  • 例:Intel 82576EB

uek_for_oracle7

 

Receive-Side Scaling(RSS)
Linux中的NIC的单一队列/多队列查看方法

  • /sys/class/net/ethX/queues/
    • 作为多队列来操作的NIC会展示多个的接收信息队列(rx-n
    • 队列的个数量依赖于NIC芯片以及device驱动,CPU数量等

 

uek_for_oracle8

 

 

  • /proc/interrupts
    • 单一队列NIC中,对一个interface只能分割一个队列
    • 多队列NIC时,对一个interface能分割多个队列

uek_for_oracle9

 

dmesg 命令


Intel(R) Gigabit Ethernet Network Driver - version 3.0.6-k2
Copyright (c) 2007-2011 Intel Corporation.
igb 0000:05:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
igb 0000:05:00.0: setting latency timer to 64
 alloc irq_desc for 52 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 52 for MSI/MSI-X
 alloc irq_desc for 53 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 53 for MSI/MSI-X
 alloc irq_desc for 54 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 54 for MSI/MSI-X
 alloc irq_desc for 55 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 55 for MSI/MSI-X
 alloc irq_desc for 56 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 56 for MSI/MSI-X

alloc irq_desc for 57 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 57 for MSI/MSI-X
 alloc irq_desc for 58 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 58 for MSI/MSI-X
 alloc irq_desc for 59 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 59 for MSI/MSI-X
 alloc irq_desc for 60 on node -1
 alloc kstat_irqs on node -1
alloc irq_2_iommu on node -1
igb 0000:05:00.0: irq 60 for MSI/MSI-X
igb 0000:05:00.0: 0 vfs allocated
igb 0000:05:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:05:00.0: eth0: (PCIe:2.5Gb/s:Width x4) 00:17:42:9b:e0:50
igb 0000:05:00.0: eth0: PBA No: FFFFFF-0FF
igb 0000:05:00.0: Using MSI-X interrupts. 8 rx queue(s), 8 tx queue(s)


eth0 有多个的队列
(irq 52到60)

 

 

  • NIC即使是硬件多队列,通过组合使用device驱动,也可以作为单一队列来操作
    • NIC的芯片的目录中,即使记载了多队列/RSS,但在OS上要如何操作又是不同的
    • RSS即使有效,也需要配合device驱动来查看

 

  • Receive Packet Steering (RPS)
    • NIC即使是单一队列,也需要在多个CPU中分担软分割处理的一部分
    • 在软件中模拟多队列

uek_for_oracle10

 

  • Receive Packet Steering & Receive Flow Steering
    • Linux 2.6.35 的功能back port 到UEK R1(2.6.32base)了
      • Oracle Linux 5 + UEK R1中也可以使用
      • RHEL中安装了6.1
    • 网络device的1个接收信息队列的软分割处理由一个CPU负责
    • 接收信息队列为1个device时,网络接受信息吞吐量就会到达上限
    • 即使其他CPU核心有富余,网络需求就会到达上限,因为服务器性能也会到达上限
  • RPS&RFS可以使用软件,将一个网络接收信息队列的软分割处理分散在多个CPU中
    • 可以改善单一队列NIC中的接收信息性能

 

 

  • RPS/RFS中将软分割处理分散在多个CPU后们需要重新设定
  • 设定文件如下所述

/sys/class/net/ethX/queues/rx-Y/rps_cpus(X为NIC的数量Y队列的数量)

  • 默认値
  • 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000
  • 如果设定为0的话,RPS就会无效。换言之,默认就是无效的
  • 加入标签时,使用16进制,对各个CPU添加标签
    (内部16进制被变更为2进制)
  • 例: echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus的情况,2进制就变成了“1111”。
    这时,通过RPS,可以成为CPU分割对象的CPU最多为3个。

 

  • 使用RPS/RFS将软分割处理分散到多个CPU中,并且需要重新设定
  • 系统整体的设定文件(系统整体中的设定値)
    /proc/sys/net/core/rps_sock_flow_entries(默认値:0)

 

  • 各个ethdevice的设定文件(各个device的设定値)
    /sys/class/net/ethX/queues/rx-Y/rps_flow_cnt(默认値:0)
    X为NIC的数量,Y队列的数量)
  • 各设定文件中,可以设定任意值(仅限2的阶乘值)
  • 将输入到/proc/sys/net/core/rps_sock_flow_entries中的值,设定为不超过所有ethdevice的rps_flow_cnt的合计值来进行设定

 

验证设备的1Gbps Ethernet NIC

uek_for_oracle12

某医院HIS系统Oracle升级人天计划

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

 

pd-upgrade-his-oracle

电商参考架构第一部分:搭建一个灵活、可搜索、响应快速的产品目录系统

如今,产品目录数据管理对零售商而言是一个非常复杂的问题。经过多年对多个庞大、由供应商提供的系统的依赖之后,零售商目前正在重新考虑他们的选择,并且开始展望未来。

在如今供应商提供的系统中,产品数据必须得频繁地使用 ETL 工具来回迁移,以保证所有的系统均在相同数据集上进行操作。这个方法就开发和管理而言是非常缓慢、容易出错,并且非常昂贵的。因此,零售商目前正在努力将 数据服务单独作为一个集中的、面向服务架构(SOA)的一部分。

  [Read more…]

MongoDB中trace Query跟踪查询的方法

MongoDB中可以使用db.setProfilingLevel的方法来跟踪查询语句,语法为db.setProfilingLevel(level, slowms)。其作用是修改当前数据库的PROFILER级别来让数据库记录更多的性能数据。

LEVEL 参数:制定profiling的级别,0是不跟踪,1代表只跟踪慢的操作,2代表跟踪所有操作。

slowms 参数:设置的时间阈值,大于该阈值则认为查询是慢的SLOW的

设置LEVEL=2可能会少量影响MongoDB性能,由于查询的历史将被记录到日志,所以也可能存在安全风险。

也可以通过设置slowOpThresholdMs参数来指定慢的查询,默认为100ms。

mongod会将大于slowOpThresholdMs指定时间的查询记录到mongod.log日志中。

使用方法:

 

db.setProfilingLevel(2);
{ "was" : 0, "slowms" : 100, "ok" : 1 }

> db.test.count();
50000

> db.system.profile.find();
{ "op" : "insert", "ns" : "test.test", "query" : { "_id" : ObjectId("55813154648066edd8eda678"), "a" : 48087, "b" : 48088, "c" : 48089, "d" : 48090, "e" : [ 1, 2, 3, 4, 5, 6, 48086 ] }, "ninserted" : 1, "keyUpdates" : 0, "writeConflicts" : 0, "numYield" : 0, "locks" : { "Global" : { "acquireCount" : { "w" : NumberLong(1) } }, "Database" : { "acquireCount" : { "w" : NumberLong(1) } }, "Collection" : { "acquireCount" : { "w" : NumberLong(1) } } }, "millis" : 0, "execStats" : {  }, "ts" : ISODate("2015-06-17T08:35:32.967Z"), "client" : "127.0.0.1", "allUsers" : [ { "user" : "maclean", "db" : "test" } ], "user" : "maclean@test" }

PRM-DUL 恢复损坏数据库中的存储过程、函数、包package和索引INDEX、序列SEQUENCE等

恢复损坏数据库中的存储过程、函数、包package和索引INDEX、序列SEQUENCE等

 

字典模式下扫描需要的数据文件

export_ddl1

export_ddl2

 


export_ddl3

export_ddl4

 

经验证,数据正确

PRM-DUL恢复oracle表上被删除的记录测试

误delete表的恢复

模拟误delete表TORDER

prm-dul-undelete

 

使用PRM工具恢复

选择字典模式

prm-dul-undelete1

 

 

扫描所有的asm磁盘

prm-dul-undelete2

 

选择需要的数据文件,也可选择所有的

prm-dul-undelete3

 

选择被删除的表,进行unload delete

prm-dul-undelete4

 

 

恢复成功,验证数据

沪ICP备14014813号-2

沪公网安备 31010802001379号