タグ

Tipsとperformanceに関するkathewのブックマーク (47)

  • SQLが重いときに見るお気軽チューニング方法

    SQLのチューニング方法 昔Qiitaで書いたものをzennうつして、若干の修正、追加をしてみました。 ORACLEでの経験を元に書いていますがコストベースのリレーショナルデータべースなら大体共通の考え方だと思うので他にも使えると思います。 SQLのチューニングといえば比較的容易に済むインデックスをとりあえず作成する。といった対応を取られがちですが、数万レコード程度でのデータ量ではあまり効き目がなく(自分の経験則)、どちらかといえば、結合順が大幅に狂ってたりすることが原因のことが多かったりします。よって当にインデックスがないことが原因なのか?を熟考する必要があります。(例えばID以外のフラグとかコードに単項目indexを貼ってるのもみたことがあります。怖いけど実話) また、インデックスを作りすぎるとオプティマイザが狂いやすくなって他のSQLにも悪影響を及ぼしたりするので結構熟慮して追加

    SQLが重いときに見るお気軽チューニング方法
  • たった3秒でInnoDBのデータローディングが快適になるライフハック

    MySQLに限った話ではないが、データベース管理システムに大量のデータを投入するのは時間が掛かり大変苦痛を伴う作業である。劇的に効能があるわけではないが、MySQLを利用しているとき、特にInnoDBを使っている場合にはデータの投入を高速化するためにいくつかテクニックがあるので紹介しよう。皆さんの作業時間が短縮され、少しでも早く帰路に着いたりサービスインさせたりという形でお役に立てれば幸いである。ちなみに、タイトルはネタであるのだが、もし当に3秒で以下の全ての設定を行えた人が居たら教えて頂きたい! ログファイルサイズの調整データ投入時に限った話ではないが、ログファイルサイズを調整するのは更新性能にとって非常に重要なファクターである。バッファプールのサイズが重要なことに代わりはないが、同じぐらいログファイルのサイズも重要である。InnoDBはログファイルを使い切ってしまうと、バッファプール

    たった3秒でInnoDBのデータローディングが快適になるライフハック
  • やってはいけない!!MySQLに悲鳴をあげさせる10の方法

    いつも「MySQLを使うときはこうするべき」という観点から記事を書いているが、今日は逆に犯してはいけない過ちをリストアップしようと思う。 1. 全てのカラムにインデックスをつけるデータベース初心者がもっともやってしまいがちな間違いはコレではないだろうか。インデックスはいい。検索がとても速くなるから。しかし、それと引き替えにインデックスは更新するときにコストがかかるし、その分多くのディスクスペースを消費する。特に更新にかかるコストは時に甚大で、該当するインデックスのページがキャッシュ上にない場合はディスクからいったんそのページを読み込まなければいけない。ディスクアクセスは動作にとても時間がかかるので、インデックスが多数、例えば全てのカラムに付いていたりすると「あれ?固まったか?」というような状態になってしまうことがあるだろう。インデックスは必要なカラムにだけつけるようにテーブルを設計しよう。

    やってはいけない!!MySQLに悲鳴をあげさせる10の方法
  • MySQLのデータベースを最適化するとWordPressは高速化するのか?

    MySQLのデータベースを最適化するとWordPressは高速化するのか?
  • phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化 - WordPress - MySQL入門 - Webkaru

    phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化する方法を紹介します。 オーバーヘッドとは、MySQLデータベースへの書き込み・削除・更新(INSERT、DELETE、UPDATE)を繰り返していると、たまってくるゴミのようなものです。 オーバーヘッドが多くなるとMySQLデータベースの挙動が重くなり、クエリが遅くなってくるので、ここではphpMyAdminを使って、MySQLデータベースのテーブルを最適化し、オーバーヘッドを取り除く方法を紹介します。 ※ 人気のブログシステム「WordPress」もデータベースにMySQLを採用しているので、オーバーヘッドがたまってくると表示が遅くなったり、管理画面が重く感じるような症状があらわれます。 WordPressの使い方

    phpMyAdminを使って、MySQLデータベースのオーバーヘッドを最適化 - WordPress - MySQL入門 - Webkaru
  • JavaScript:処理時間計測方法 - 覚え書き.com

    JavaScriptでの処理時間計測方法をご紹介します。 JavaScriptで処理時間を計測する方法としては主に「console.time()を使用する方法」と「Dateオブジェクトを使用する方法」があります。 console.time()を使用する方法

    JavaScript:処理時間計測方法 - 覚え書き.com
  • MySQLはインデックスされた文字列型カラムに数値型カラムをインデックスを使って結合できない - Qiita

    Help us understand the problem. What is going on with this article?

    MySQLはインデックスされた文字列型カラムに数値型カラムをインデックスを使って結合できない - Qiita
  • CakePHPのModel->query()でSQLを何回も発行するようなバッチを作る際の注意点 - Qiita

    ほとんどこんな事例ないと思うけど、メモ。 CakePHPでバッチを作る際に、Model->query()でSQLを何回も発行するような組み方をしてしまうと、メモリが足りなくて処理落ちする事がある。まぁ、そもそもこんなバッチ組んでるのどうなの?って思うけど。 <?php class HogeShell extends AppShell { public $uses = array('Hoge'); public function main() { for ($i=0; $i<100; $i++) { // メモリ足りなくて死ぬ $result = $this->Hoge->query('...'); } } } 前提 CakePHP 2.4.x Model->find() などはクエリキャッシュできる Modelにはセッション単位でのクエリキャッシュする機能がある。Model-> cache

    CakePHPのModel->query()でSQLを何回も発行するようなバッチを作る際の注意点 - Qiita
  • タスクマネージャーのパフォーマンスタブの見方(Windows 7/Server 2008 R2編)

    的には、この値はシステムの起動から終了時まで変わることはない(稼働中にメモリを追加できるホットアドオンメモリをサポートしたサーバシステムの場合は変わることがある)。 ■キャッシュ済み (6) これは、キャッシュ(SuperFetchの分も含む)として利用されているメモリ領域のサイズを表す。 キャッシュは、パフォーマンス向上のためにファイルのデータを先読みしたり、書き込み済みのデータをそのまま保持しておいて、後で再利用したりできるようにするために利用される。また実行済みのプログラムやリソース領域をすぐにクリアせずに残しておいて、プログラムの再起動を高速に行ったり、SuperFetch用の領域などとしても利用される。 キャッシュに保存されているデータやプログラムは、ディスクへのアクセスというペナルティなしに高速に利用できる。 ■利用可能 (7) これはWindows 7およびWindows

    タスクマネージャーのパフォーマンスタブの見方(Windows 7/Server 2008 R2編)
  • USBメモリにReadyBoostを設定してキャッシュを逃がす

    ReadyBoostは昔からあるが、Windoes7(64bit)にして物理メモリを4GB積んでいればお世話になることもないと思っていた。 ネットを見るぐらいの使い方しかしていないので十分なハズである。 (ReadyBoostの記載は下のほう。★までジャンプ) 症 状 最近はスリープから復帰後しばらくすると、ハードディスクへのアクセスが10分くらい延々と続き、ブラウザの表示もままならない。この間はひたすら待つしかない。 何が原因なのか分からないのでとりあえずリソースモニタで確認すると、system PID=4が書き込みをしていることまでは分かった。 何を書き込んでいるのか。 原因の推測 可能性として、 仮想メモリのページングファイル インデックス作成 プリフェッチ(次の動作を先読みしてキャッシュする) あたりが怪しい。 仮想メモリはハードディスクに書き込まれる。 多くのメモリを消費すると仮

    USBメモリにReadyBoostを設定してキャッシュを逃がす
  • NetBeansが重いときの対処法 – rilakkuma3xjapan's blog

    あくまでも, 1つの原因であり対処法にすぎませんが, NetBeansが重くなる1つの理由に, プロジェクト内のファイルが多いことがあげられます. 必要なファイルならば仕方ありませんが, 画像などのバイナリファイルやPSDファイルなどのアプリケーションファイルなど直接編集する必要のないファイルまでプロジェクトに含めていると動作が重くなる原因の1つになります. そこで, プロジェクトのプロパティから, 不要な (直接編集の必要がない) ディレクトリを無視されたフォルダに設定するようにします. 1. プロジェクトのプロパティ NetBeans プロジェクト プロパティ 2. 無視されたフォルダ NetBeans プロジェクト プロパティ 無視されたフォルダ 3. フォルダ (ディレクトリ) の追加 NetBeans プロジェクト プロパティ 無視されたフォルダ フォルダの追加

    NetBeansが重いときの対処法 – rilakkuma3xjapan's blog
  • 【MySQL】SELECT * (アスタリスク) (全取得)が遅いのか検証する - pospomeのプログラミング日記

    個人的にDBからデータを引っ張るときに必要なカラムのみを指定するのが嫌い。 カラム指定すると 検索条件が同じなのに、 必要なカラムが異なるだけで複数のAPIを実装し、 使う側は適切なAPIを選択しなければならない。 APIの命名にも苦労するし、そもそもDAOが肥大化する可能性があるのがイヤ。 命名も実装も上手くやれば問題ないんだろーけど、実際はそーもいかない気が・・・。 ということで、 必要なカラムのみ指定するのが正しいとは思うけど、 SELECT * で全カラム引っ張りたい。 でも、無駄なカラムを引っ張るとパフォーマンスが気になる。 ということで、検証してみた。 結論から言うと、結構変わるかもしれない。 以下がテスト環境。 CentOS 6.5 MySQL 5.5 メモリ:500MB(buffer_poolに384MB割り当て) 以下が今回のテストテーブル int型のカラムを30個用意し

    【MySQL】SELECT * (アスタリスク) (全取得)が遅いのか検証する - pospomeのプログラミング日記
  • いまさらAPCをインストールして、PHPの実行を高速化してみた ::ハブろぐ

    APC(Alternative PHP Cache)とは Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。 ( PHP: 導入 - Manual ) スクリプトを起動するたびに、実行コードにコンパイルしている部分を、元のスクリプトに変更が無い限り(※)キャッシュして使い回すカタチで、PHPの全般的な実行を高速化する仕組みです。 ※スクリプトの変更の有無を確認する・しないのオプション ( apc.stat ) も別途で存在し、それを確認しないようにすると、その分さらにパフォーマンスが向上します。 今回は、さくらのVPS標準のCentOS 5.5と、「とあるさくらのV

    いまさらAPCをインストールして、PHPの実行を高速化してみた ::ハブろぐ
  • 【CakePHP 2.x】CakePHP 2.x の高速化Tips - pospomeのプログラミング日記

    フレームワークは便利なんだけど、動作が遅い。 もちろん CakePHP も例外ではない・・・。 ということで、高速化Tipsをまとめてみた。 1.PHP-APCで中間コードをキャッシュ これはCakePHPに限らずだけど、 結構パフォーマンスに差が出るのでやっておく。 2.Formヘルパーを使わない 可能な限りHTMLは直書きでいいと思う。 3.Model ではquery() を使ってSQLを直書きする。 find()とか便利だけど、ちゃんとSQL書いたほうがいい。 どんなクエリを発行しているか確認しやすいし、 変なクエリの発行も防げる。 ただし、配列のインデックスがおかしくなるのが面倒。 4.Model の recursive の初期値は -1 に設定する。 意図しないところでassociationが効いてたりするので、 初期値を -1 にするといい。 ただ基は3番目のTipsのように

    【CakePHP 2.x】CakePHP 2.x の高速化Tips - pospomeのプログラミング日記
    kathew
    kathew 2016/05/09
    自環境ではアソシエーションをバリバリに使っているので3番は適用できないけど、その他色々参考に
  • はじめての MySQL で100万件のデータを管理する時に行ったチューニングまとめ

    MySQL の勉強をせずにフレームワーク等で SQL を書かずに Web サイトを構築していました。データ数も2万件程度でしたので、そこまで困ることはありませんでしたが、今回100万弱の商品データを扱う機会ができたので、MySQL のチューニングや発行する SQL について見直す機会がありました。 この記事では MySQL を高速化するのに行った対策など勉強したものを自分用にメモしておきました。 条件式で比較するカラムにインデックスを使用して高速化 商品コードで存在しない商品を見つけて、商品をDBに登録するという処理を行っている場合、4万件超えたころから処理に2秒以上かかるようになってきます。12万件超えた頃には10秒程度かかるようになってしまいましたが、商品コードのフィールドに対してカラムインデックスを貼ることで0.2秒に短縮することができました。 MySQL のリファレンスにも以下のよ

  • CakePHPでやたら遅いSELECTクエリの改善 - うっかりエンジニアのメモ

    プライベートで作ったWebアプリで、一画面だけブラウザに表示されるまで3秒かかる激重画面があります。 この画面ではCakePHPが自動的にいろんなテーブルをjoinしたSQLを生成しているので、その辺りが原因だろうとは感づきました。 それにしても、たかだか20行程度のselectなので、なんか変だ。。。 ちょっとだけ分析と改善をしました。(はじめてのパフォーマンスチューニング…ドキドキ) 結論としては、1000倍早くなりました。 CakePHPのクエリ自動生成は楽ですが、パフォーマンス上の問題が発生した時にはやはりSQLを知らないとダメだなぁ… 環境 VirtualBoxのVM(メモリ613MB)上に下記の環境があります。 CentOS 6.5 x64 nginx 1.0.15 PHP 5.5.13 MySQL 5.5.37 CakePHP 2.4.0 テーブル構造 テーブル 内容 外

    CakePHPでやたら遅いSELECTクエリの改善 - うっかりエンジニアのメモ
  • MySQLの超遅いSELECTが劇的に早くなった | X->A->O

    CakePHPはよく触っていたものの、MySQLについてあまり知らなかったんですが、大規模なデータベースを扱ってみようと思い立ちいろいろ試行錯誤しています。 で、ついさっき感動したのが、40万件のレコードを扱ってるテーブルに簡単なSELECT分を投げて返ってくる時間がなんと5秒もかかっていて、なんじゃこりゃ?って首をかしげてたんですが、INDEXひとつで劇的に早くなったこと。 40万件が大規模かそうでないかはこの際おいておいて、INDEXのつけ方次第でこんなにも速度に変化があるのかと涙が出そうになった。 最初の激遅いテーブルは簡単に書くとこんな具合。 CREATE TABLE IF NOT EXISTS `shops` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `status

  • select * は禁じ手で、必ず列名を列挙すべしとされている理由 - 極北データモデリング

    select * from ... と書いてはダメ、たとえ全列取得する場合でも select a, b, c, d from ... と書くのが常識、という話をずいぶん前に聞いたことがあって、意味がわからないので人力検索に投げてみた。 いただいた回答を整理しておく。 テーブル内の一部の列を参照したい場合 例えばクライアント側では1列しか見ないのにワイルドカードで全列取得することには、パフォーマンス上の問題がある。 select * from ... でも select a from ... でもディスクI/Oのコストは基的に変わらないが*1、それ以外のところに問題がある。 ネットワークの問題。DBサーバからクライアントに転送するデータが無駄に大きくなる メモリの問題。DBMSのデータキャッシュやOSのファイルキャッシュが無駄遣いされる テーブルの全ての列を参照したい場合 全列取得したい場

    select * は禁じ手で、必ず列名を列挙すべしとされている理由 - 極北データモデリング
  • Windows7/10:PCが重い!SearchIndexer.exe (Windows Search)を停止するには-教えて!HELPDESK

    Windows7/10:PCが重い!SearchIndexer.exe(Windows Searchサービス)を停止するには メモリを消費するSearchIndexer.exe(Windows Searchでインデックスを付ける サービス)を停止する方法をご紹介します。 ■ SearchIndexer.exeとは? 素早く検索ができるよう、PC内のファイルにインデックスを付け るサービスです。インデックス作成、プロパティキャッシュ処理、検索結果の表示を行い、Windows検索の処理スピードを上げる役目を果たしています。※実態はC:\Windows\System32\SearchIndexer.exe(WindowsSearchサービス) タスクマネージャーのプロセスタブ→「全ユーザーのプロセスを表示する」→ SearchIndexer.exeで確認できます(サービスタブのWsearchでも

  • Vistaで4GBのメモリを実装している場合 ReadyBoost は効果があるの? - OKWAVE

    Readyboostは、普通はHDDに保存しているページング(スワップ)ファイルのキャッシュとしてUSBメモリを利用する技術です。 これにより、スワップ時のHDDアクセスが高速になり、システムの速度が向上します。 そのため4GBのメモリに4GBのUSBメモリをReadyboostとして使ったからといって、 8GBのメインメモリになるわけではありません。 Readyboostを使わない場合と同じ4GB(32bit Windowsなら約3GB)のメモリのままです。 上記のとおり、Readyboostはページングファイルのキャッシュですので、 スワップがよく発生する環境(=メモリの少ない環境)では効果が高いです。 メモリの多い環境ではスワップも少なくなるので、効果は下がります。 ※スワップ:物理メモリが足りない場合、使われていない領域をHDDに書き出す動作 ※ページング(スワップ)ファイル:スワ

    Vistaで4GBのメモリを実装している場合 ReadyBoost は効果があるの? - OKWAVE