問題タブ [disk-io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - I / Oレイテンシにより、MySQLで単純なUPDATEに数秒かかることはありますか?
一部のクエリを実行すると、 MySQLアプリケーションのパフォーマンスが低下します。この質問では、問題を実証するのに十分であるため、特定の1つについてのみ説明します。UPDATE
INSERT
DELETE
UPDATE
これUPDATE
は通常、約0.2msと十分に高速ですが、ときどき(問題になるほど)数秒かかります。これがログからの抜粋です(4行目を見てください):
projects
INT
は、6列の型とVARCHAR
、17行、および上のインデックスを持つInnoDBテーブルid
です。他のテーブルでも起こりますが、ここではこれに焦点を当てています。問題を解決しようとしたとき、クエリがすべてシーケンシャルであることを確認したので、これはロックの問題ではありません。上記UPDATE
は、トランザクションのコンテキストで実行されます。サーバーに関するその他の情報:
- 4GBのRAM(以前は1GB)、12GBの空きディスク容量を備えたVPS
- CentoOS 5.8(以前は5.7)
- MySQL 5.5.10(以前は5.0.x)
上記の「だった」ビットは、アップグレードの前後に機能しなかったことを意味します。
私がこれまでに試したことは無駄です:
innodb_flush_log_at_trx_commit
0、1、または2に設定innodb_locks_unsafe_for_binlog
オンまたはオフの設定timed_mutexes
オンまたはオフの設定innodb_flush_method
デフォルトからO_DSYNC
またはに変更O_DIRECT
innodb_buffer_pool_size
デフォルトから600M、次に3000Mに増加innodb_log_file_size
デフォルトから128Mに増加- ソースからのMySQLのコンパイル
- 実行中
SHOW PROCESSLIST
、状態が「更新中」であることを通知します - 実行中
SHOW PROFILE ALL
。これは、ほとんどすべての時間が「更新」に費やされ、そのステップ内では、CPUサイクルにそれほど多くの時間が費やされず、多くの自発的なコンテキストスイッチ(30など)があったことを示しています。 - の変更を監視
SHOW STATUS
しますInnodb_buffer_pool_pages_dirty
。フラッシュされるダーティページと遅いクエリの間には何らかの関係があるかもしれませんが、相関関係は明確ではありません。
次に、でシステムのI/O遅延を確認することにしましたioping
。これは私の最初のVPSなので、この結果を見て驚いた:
かなり不安定だと思います。
そのすべてを言ったので、私は尋ねます:
I / OレイテンシーがMySQLのパフォーマンスを低下させることがありますか?
UPDATE
を実行すると、その接続を処理するスレッドがデータをディスクにフラッシュしたり、そのようなフラッシュを待機したりすることはないといつも思っていました。それはすぐに戻り、フラッシュは別の時間に別のスレッドによって実行されます。ディスクI/Oにできない場合、専用サーバーを借りる以外に、他に試すことができることはありますか?
c# - 辞書を最適に出力する
200 ~ 6000 文字の 800k 文字列を含む 4 つの辞書があります。メモリにロードすると、約11ギガのメモリが必要になります。データの解析に 2 分、データの出力に 2 分かかります。私が以下で使用しているものよりも速くデータを出力する方法はありますか? 1 秒あたり 20 ~ 31 MB のディスク IO しか得られませんが、ハード ドライブが 800 くらいできることはわかっています。
c# - 最終的な System.UnauthorizedAccessException: パスへのアクセス ... 拒否されました
以下に示す関数を呼び出す単純な C# コンソール プログラムがあります。
一部の Win 7 マシンでは、この関数は最終的に例外をスローします (i が 100,000 を超える場合)。
これらのマシンには、McAfee エージェントと Cisco セキュリティ エージェント、およびその他のソフトウェアのホストがインストールされています。Windows Defender が無効になっています。プログラムは管理者コンソールで実行されています。プログラムは .net 3.5 用にコンパイルされています。これは、W2k3 または XP マシンでは見られませんでした。
procmon を使用して、"Temp\sample.txt" が作成および削除されたフォルダーにアクセスしているすべてのイベントとプロセスを監視すると、test-application を除いて他のプロセスがパスにアクセスしていないことがわかります。例外の後でも、procmon にリストされている他のプロセスはありません。したがって、それがウイルス対策のせいだと証明することはできません。
誰が何が間違っているのか考えていますか? Win7 の .net でバグを見つけましたか ;)
ありがとう!
filesystems - 利用可能なオープンソースのクラウド ファイル システムはありますか?
現在のプロジェクトにはクラウド ファイル システムが必要です (正確にはクラウド FTP)。
利用可能なオープンソースの実装はありますか? もしよろしければ、参考になさってください。実装に関連する技術レポートがあれば、それは良いことではありません:)
見つけられなかったので、ゼロから実装しようと考えています。それでも問題が発生します。ローカル ファイル システムと同様に、block
基本的なストレージ ユニットとして の概念を導入したほうがよいと思います。これは、インターネット上での小さなオブジェクトの転送のオーバーヘッドを削減するためです。次に、ローカル fs シナリオでブロック サイズが大きすぎるとディスク使用量が劇的に低下することを考えると、転送コストとクラウド ストレージ使用量の間でどのように妥協するのでしょうか? ブロックサイズはどのくらいの大きさに設定すればよいですか?
上記のトレードオフについて先輩に相談したところ、可変ブロックサイズを採用できるとのアドバイスがありました。では、なぜ minix や ext3 のような古典的なファイル システムがこの戦略をとらないのか、興味があります (間違っていたら訂正してください)。
c# - UNC パスは .NET で機能しませんか?
UNC形式を使用して指定された同じマシン上のフォルダー内のファイルをリストしようとする非常に単純なプログラムを実行しています( http://msdn.microsoft.com/en-us/library/windows/で説明されているように)デスクトップ/aa365247%28v=vs.85%29.aspx ):
ただし、Directory.GetFiles() は機能せず、ArgumentException をスローします (パスが長さ 0 の文字列である、空白のみが含まれている、または InvalidPathChars で定義されている無効な文字が 1 つ以上含まれている場合にスローされます)。Console.Writeline() は何も出力しません。これは、パスに無効な文字がないことを確認します。「\\UNC\?\d:\share\input」または「\\UNC\?\machinename\share\input」または「\\?\machinename\share\input」を使用すると、同じ例外が発生します。
「d:\share\input」は確かに共有フォルダーです。
誰が何が間違っているのか知っていますか?
ありがとう!
java - キャッシュなしでファイルの読み取り速度を測定する方法は?
私の Java プログラムは、いくつかのファイルを読み取ることにほとんどの時間を費やしています。たとえば、同時実行、プリフェッチ、メモリ マップ ファイルなどを使用して最適化したいと考えています。
ベンチマークなしで最適化するのはナンセンスなので、ベンチマークします。ただし、ベンチマーク中は、実際の実行とは異なり、ファイル コンテンツ全体が RAM にキャッシュされます。したがって、ベンチマークの実行時間ははるかに短く、おそらく現実とは無関係です。
ファイルの内容をキャッシュしないように OS (Linux) に何らかの方法で指示するか、各ベンチマークを実行する前にキャッシュを消去する必要があります。または、使用可能な RAM (32 GB) のほとんどを消費して、ファイル コンテンツのごく一部しか収まらないようにすることもできます。
ベンチマークにキャリパーを使用していますが、この場合は必要ないと思います (決してマイクロベンチマークではありません)。それが良いアイデアかどうかもわかりません。
linux - Linux でファイルを安全かつトランザクション的に置き換える方法は?
ファイルの内容を置き換えるために私が考えることができる最も素朴で最悪の方法は次のとおりです。
明らかに、その操作が閉じる前のある時点で失敗した場合、元のファイルの内容は失われますが、必ずしも新しい内容が完成するとは限りません。
それで、これを行うための完全に適切な方法は何ですか(ある場合)。次のようなものだと思います。
しかし、それは完全にアトミックで安全ですか? 実際に移動を実行するための適切なコマンドは何ですか? への接続が開いている別のプロセスがある場合file.txt
、それが閉じるまで元のファイルへのポインターを保持すると想定します。移動中に別のプロセスが開こうとした場合はどうfile.txt
なりますか?
プロセスが完全で破損していないバージョンを取得する限り、プロセスが取得するファイルのバージョンはあまり気にしません。
c - Is is possible to write to different parts of the same file from multiple threads?
Can I write to different parts of the same file concurrently from multiple threads (on a typical PC)? I mean there's only one disk head, so the writes can be only performed in some order anyway i.e. not in parallel, right?
Edit:
I'm writing a program that sorts a large binary file but the majority of time is still spent on disk I/O, so I'm just wondering will I gain any extra speed by doing I/O in parallel.
java - パフォーマンス: BufferedOutputStream と FileWriter の比較
私はいつもFileWriter
Java でファイルにテキストを書き込むために a を使用してきました。どうやら a も使用できるようですBufferedOutputStream
。両方の javadoc を注意深く読んだ後、どちらがより高速で効率的であるかはわかりません。
そこで質問します。これら 2 つのファイル I/O メソッドの間にパフォーマンスの違いはありますか (最小限であっても) ? もしそうなら、それらは何で、なぜですか? そうでない場合、なぜそれらは事実上同じなのですか?
どちらかが優先されるシナリオはありますか? 前もって感謝します!