カテゴリー : 2015年 8月

[MongoDB] データベースファイルが保存されるパス dbpath を確認する

MongoDB のデータベースファイルが保存される dbpath は db.serverCmdLineOpts() の実行結果から確認できます。

dbpath を確認するクエリ

db.serverCmdLineOpts().parsed.dbpath           // MongoDB 2.4 and older
db.serverCmdLineOpts().parsed.storage.dbPath   // MongoDB 2.6+

(例) db.serverCmdLineOpts() の実行結果

dbPath 以外にも config ファイルや systemLog ファイルの出力先なども確認できます。

> db.serverCmdLineOpts()
{
	"argv" : [
		"/usr/local/opt/mongodb/bin/mongod",
		"--config",
		"/usr/local/etc/mongod.conf"
	],
	"parsed" : {
		"config" : "/usr/local/etc/mongod.conf",
		"net" : {
			"bindIp" : "127.0.0.1"
		},
		"storage" : {
			"dbPath" : "/usr/local/var/mongodb"
		},
		"systemLog" : {
			"destination" : "file",
			"logAppend" : true,
			"path" : "/usr/local/var/log/mongodb/mongo.log"
		}
	},
	"ok" : 1
}

以上です。


参考情報

[MySQL] database と table の size を確認する

MySQL で database と table の size を確認する SQL をご紹介します。

全 database の size を確認する SQL

全てのデータベースのサイズを確認するクエリです。

# MB
SELECT table_schema, SUM(data_length+index_length) /1024 /1024 AS MB
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length+index_length) DESC;
 
+--------------------+---------------+
| table_schema       | MB            |
+--------------------+---------------+
| databaseName       | 1376.11649799 |
| mysql              |    0.67155933 |
| information_schema |    0.00878906 |
| performance_schema |    0.00000000 |
+--------------------+---------------+
 
 
# GB
SELECT table_schema, SUM(data_length+index_length) /1024/1024/1024 AS GB
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length+index_length) DESC;
 
+--------------------+----------------+
| table_schema       | GB             |
+--------------------+----------------+
| databaseName       | 1.343863953836 |
| mysql              | 0.000655819662 |
| information_schema | 0.000008583069 |
| performance_schema | 0.000000000000 |
+--------------------+----------------+

table 単位で size を確認する SQL

特定のデータベースにて、テーブル単位でサイズを確認するクエリです。

USE databaseName;
 
SELECT
TABLE_NAME, engine, table_rows AS tbl_rows, avg_row_length AS rlen,  
FLOOR((data_length+index_length)/1024/1024) AS allMB,  # TOTAL SIZE
FLOOR((data_length)/1024/1024) AS dMB,  # DATA SIZE
FLOOR((index_length)/1024/1024) AS iMB   # INDEX SIZE
FROM information_schema.tables  
WHERE table_schema=DATABASE()  
ORDER BY (data_length+index_length) DESC; 
 
 
+-----------------------------+--------+----------+------+-------+------+------+
| TABLE_NAME                  | engine | tbl_rows | rlen | allMB | dMB  | iMB  |
+-----------------------------+--------+----------+------+-------+------+------+
| wp_commentmeta              | MyISAM |  1188843 |  596 |   863 |  824 |   38 |
| wp_comments                 | MyISAM |   312819 | 1067 |   382 |  358 |   24 |
| wp__wsd_plugin_live_traffic | InnoDB |   730696 |  176 |   122 |  122 |    0 |
| wp_posts                    | MyISAM |     2542 | 1910 |     4 |    4 |    0 |
| wp_postmeta                 | MyISAM |    13165 |   55 |     1 |    0 |    0 |
| wp_options                  | MyISAM |      237 | 1410 |     0 |    0 |    0 |
| wp_term_relationships       | MyISAM |     3553 |   21 |     0 |    0 |    0 |
| wp_terms                    | MyISAM |      800 |   46 |     0 |    0 |    0 |
| wp_redirection_logs         | InnoDB |        0 |    0 |     0 |    0 |    0 |
| wp_redirection_items        | InnoDB |        0 |    0 |     0 |    0 |    0 |
| wp_term_taxonomy            | MyISAM |      839 |   39 |     0 |    0 |    0 |
| wp__wsd_plugin_alerts       | InnoDB |       19 | 2586 |     0 |    0 |    0 |
| wp_redirection_modules      | InnoDB |        3 | 5461 |     0 |    0 |    0 |
| wp_redirection_groups       | InnoDB |        2 | 8192 |     0 |    0 |    0 |
| wp_usermeta                 | MyISAM |       29 |  519 |     0 |    0 |    0 |
| wp_sitemeta                 | MyISAM |       26 |  115 |     0 |    0 |    0 |
| wp_site                     | MyISAM |        1 |   28 |     0 |    0 |    0 |
| wp_users                    | MyISAM |        1 |  100 |     0 |    0 |    0 |
| wp_blogs                    | MyISAM |        1 |   48 |     0 |    0 |    0 |
| wp_tweet_urls               | MyISAM |        0 |    0 |     0 |    0 |    0 |
| wp_signups                  | MyISAM |        0 |    0 |     0 |    0 |    0 |
| wp_links                    | MyISAM |        7 |   77 |     0 |    0 |    0 |
| wp_blog_versions            | MyISAM |        0 |    0 |     0 |    0 |    0 |
| wp_registration_log         | MyISAM |        0 |    0 |     0 |    0 |    0 |
+-----------------------------+--------+----------+------+-------+------+------+

stored procedure に SQL を登録する

毎回、長い SQL を実行するのは面倒なのでストアドプロシージャに登録しておくと便利です。

show_table_size() という名前で登録する SQL

delimiter //
CREATE PROCEDURE show_table_size()
BEGIN
SELECT
TABLE_NAME, engine, table_rows AS tbl_rows, avg_row_length AS rlen,  
FLOOR((data_length+index_length)/1024/1024) AS allMB,  # total SIZE
FLOOR((data_length)/1024/1024) AS dMB,  # DATA SIZE
FLOOR((index_length)/1024/1024) AS iMB   # INDEX SIZE
FROM information_schema.tables  
WHERE table_schema=DATABASE()  
ORDER BY (data_length+index_length) DESC; 
END
//
delimiter ;

登録した stored procedure を使う

CALL show_table_size;

以上です。

参考情報

「YAPC::Asia Tokyo 2015」8/22(土) 振り返り #yapcasia

「YAPC::Asia Tokyo 2015」の最終日を振り返ります。

2015-08-22 17.45.09

ISUCONの勝ち方

チューニングの進め方

課題の理解
プロファイリング
Web アプリケーションで起きていることを知る

プロファイリング結果を読み解く慣れも必要

matsuu/kataribe
Nginx/Apache Log Profiler

MySQL SlowLog解析
クエリ実行回数と頻度

アプリケーションのプロファイリング

各プログラミング言語のツールを使う
strace

tcpdump

サーバの負荷をみる
top
iftop

サーバ構成の把握

Nginx vs. h2o

参考資料

MySQL の offset はレコード数が多くなると遅くなる

参考資料

Covering Index を使おう。

参考資料


我々はどのように冗長化を失敗したのか

Q) LVS 使えばいいんじゃないの?
A) そうですね。

参考資料


MySQLで2億件のシリアルデータと格闘したチューニングの話

TL;DR

サーバリソースが乏しい中で大量データを扱うのは大変


データ分析基盤を支える技術

TL;DR

  • データ解析基盤を作るのはやめましょう
  • クラウドベンダーにお任せしましょう
  • 実現したいことに対して、クラウドベンダーを使いましょう

「Hadoop を自社で持ちたい?やめろ!」


【特別企画】YAPCあるある(仮)

CONBU

”大規模なカンファレンスや勉強会が行われる会場において、会場ネットワークを構築し、インターネット接続を提供するネットワークエンジニアの集団”

所感

CONBU の存在を初めて知りました。YAPC の会場内のネットワーク構築ありがとうございました。

そして、YAPC の運営に関わってきたみなさま、ありがとうございました。


HTTP2 時代の Web

個人的なメモ

  • Browser Cache について、75% の人は 48h で使い切る。
  • インフラの実装は過渡期

Lightning Talks Day 2

MySQL 5.7 は罠が多いので、秘伝のタレな設定ファイルが切望される。


クロージング

2015-08-22 17.53.57


まとめ

エンジニアが2000人以上も集まるイベントに参加できて、良い刺激を得れました。運営メンバーのみなさま、ありがとうございました!

追えてない、理解できてない技術トピックのキーワードを拾うことができただけでも収穫でした。全部、追うのは無理なので、ここから必要なものに絞ってキャッチアップしていきたいです。

「YAPC::Asia Tokyo 2015」8/21(金) 振り返り #yapcasia

10周年、そして、今年で終わってしまうということで最初で最後の「YAPC::Asia Tokyo」に参加してきました。

2015-08-21 11.02.55

各トークセッションの流れは Togetter にまとめられているので、こちらから探すとよさそうです。

以下、視聴したトークと個人的なメモ&所感です。


世界展開する大規模ウェブサービスのデプロイを支える技術

Miiverse | Wii U|Nintendo

AWS US/JP/EU の 3 リージョンでサーバ台数が多いと git pull が重い。

  • Git Slave への同期
  • Git Slave から Pull するときの負荷問題

Mackerel(マカレル): 新世代のサーバ管理・監視ツールを使ってるらしい。

GHE と Git Slave repository の同期が大変なので、新しくリポジトリ同期システムを作った。

所感

Consul + stretcher での deploy は規模大きくなったときに考えたい。しばらくその心配はなさそうだけど。

あと、最近だと AWS CodeDeploy (Amazon EC2 インスタンスへのコードデプロイを自動化) もあるけど、どうなんだろ?


今フロントエンドで何が起こっているのか

所感

最近のfrontendをちゃんと把握できてなかったので、なんとなく流れを理解できてよかったです。


Conway's Law of Distributed Work

分散したチームで効果的に仕事をするために使うべきツールや心構えなどが発表されていた。

Distributed Work では、効果的なコミュニケーションで時間短縮できる。

リモートワークをしている場合、その場にいるかのようにコミュニケーションに入れてあげることが重要である。

Commit Messages

コミットメッセージで会話をする。
考古学者として、あとでコードを掘り起こしたときに何か手掛かりがほしいだろう?

「何を考えていて、どうしてこうなったか?」という情報がときどき失われる。
これを残さないといけない。

CODE REVIEW

コードレビューはバグを 60% 減らせるという分析がある(らしい)。

Email

非同期コミュニケーションには適している。
すぐに返事がくることを期待しない。

Everyone should experience remote work.
まず、課題を実感して、共感して、改善するということが大切。

Have on-site meetups
一堂に会する機会を定期的につくる。

Over communicate.
「常に話す」というわけではない。
「常に書く」ということを意識する。

Share your personality
自分の個性や人格を共有するようにしましょう。
日頃のテキストチャットで共有しよう。
Off Topic の Slack channel を用意する。

Exhibit a “visible pulse.”
リモートで仕事をする場合には、自分が何をしているかアピールしなければならない。

Pick a timezone.
Standard Operating Time (SOT)

CAP THEOREM (SOME LIMITATIONS)

リモートワークでも CAP 定理が当てはまる。

Q&A

Q) リモートワークだと働きすぎる場合がありますが、どうしてますか?
A) なりますね。でも、そうすると家族が寂しくなる。
自分を律する。自分のスケジュール管理をする。
オフィスを離れるタイミング、疲れたら休む。

チームで「あなた仕事しすぎだから帰ったほうがいいよ」と声を掛ける習慣をつける。
自分の仕事に余裕を持って取り組む。

Q) Timezone が異なるとリモートワークが難しくないか?
例えば、日本とアメリカなど。
A) 日本やアメリカ毎に数人のチームを置くべきだね。
自分の意見) 実践したことがあるが On time が重なる時間帯があったので、特に問題にはならなかった。

Q) Face to face の頻度は?
A) 四半期に1回がミニマム
そのときはコードに埋没するべきではない。
中長期的な話をする場にしよう。

Q) リモートワークではモバイルは重要なツールだけど、使っているか?
A) 便利ですね。
友達や家族にとってフラストレーションになる。
時にはスマートフォンを横に置くべき。

所感

リモートワークの経験はあったので、自分のケースと照らしあわせて良い振り返りができました。

「Commit Messages がいかに大切か?」という話をするときの例えとして、「考古学者が発掘するときにヒントが欲しいでしょう?」ってのはわかりやすかった。今度、コミットメッセージの大切さを説明するときにこの例を使わせてもらおう。

※ 考古学者の仕事は、「遺跡や遺構など人類が残した痕跡を探し、発掘し、過去の人類の活動と変化を研究すること」


Electron: Building desktop apps with web technologies

所感

Demo 中心なセッションでした。

直近で、デスクトップアプリを開発する予定がないのですが、作ることがあればまず Electron を使うことになるでしょう。


esa.io – 趣味から育てたWebサービスで生きていく

「楽しく開発したい!」

自分が最近あまりできてないので見習いたい。

開発スケジュールを決めない

  • モチベーションが上がったら開発する。
  • ユーザからのフィードバックがモチベーションにつながる。

理想的っすねー。
開発自体にモチベーションが上がらなくなったときにどうしてるか?ってのが気になる。


Lightning Talks Day 1

LT もぜんぶ聴きました。


懇親会

懇親会の申し込みを忘れてたのだけど、チケット譲ってもらえて入場できました。
ありがとうございました!

2015-08-21 18.02.46

2015-08-21 18.24.02

まとめ

以上です。

[Atom] 使っている Package まとめ

Atom.io で使っているの Package をまとめました。

atom-beautifier

ctrl-alt-f でコードフォーマットをかけてくれる。

atom-beautify

autocomplete-plus

オートコンプリート

autocomplete-snippets

オートコンプリートにファイルやディレクトリも表示してくれる。

javascript-snippets

merge-conflicts

multi-cursor

矩形選択の機能を追加してくれるパッケージ

pretty-json

script

apm star atom-beautifier
apm star autocomplete-plus
apm star autocomplete-snippets
 
apm star jsonlint
 
apm star language-jade
 
## Linter ##
# https://atom.io/packages/linter
apm star linter
 
# https://atom.io/packages/linter-coffeelint
apm star linter-coffeelint
 
# https://atom.io/packages/linter-jshint
apm star linter-jshint
 
 
apm star merge-conflicts
 
apm star multi-cursor
 
apm star pretty-json
apm star script
 
# https://atom.io/packages/stylus
apm star Stylus
 
# star 付けたPackageを全てインストールする
apm stars --install

以上です。


参考情報

Atomエディタで使って気に入ったpackageとか – Qiita

ATOM でインストールしている package 一覧 – Qiita

Atomに入れたプラグインめも – Qiita