Drupal 7サイトで削除するノードが約13000あります。Views Bulk Operationsモジュールで一度に500ノードを削除しようとしましたが、タイムアウトしました。一度に削除できるノードは50までです。
一度に50を超えるノードを削除するにはどうすればよいですか?
Drupal 7サイトで削除するノードが約13000あります。Views Bulk Operationsモジュールで一度に500ノードを削除しようとしましたが、タイムアウトしました。一度に削除できるノードは50までです。
一度に50を超えるノードを削除するにはどうすればよいですか?
回答:
VBOはノードを一括削除するためのデファクトスタンダードであり、それを行うためのより良い方法はありません。
VBOはバッチで処理するため、一度に1つ(またはおそらく2つ)のノードしか処理しません。したがって、タイムアウトエラーを受け取った場合、それらはバッチ操作全体ではなく、単一ノードの削除に関連しています。
このようなものに対する標準的な解決策は、補償するためにPHPの最大実行時間を増やすことです。
Develをインストールします。次に、D7のadmin / config / development / generate / contentに移動し、すべてのコンテンツタイプを選択します。「すべてのコンテンツを削除」にチェックを入れます。「ノードをいくつ生成しますか?」に0を入力します。
「生成」をクリックします。
すべてのノードが削除されます。
generate-content
(genc
)コマンドを使用することもできます。drush help genc
使用情報については。
VBOを使用して、Drushから実行します。スケールテスト後に150万を超えるノードを削除するには、次の方法を使用しました。
drush vbo-execute my_view action :: views_bulk_operations_delete_item
ここで、my_viewはビューのマシン名です
また、drush vbo-listを使用して、使用可能なすべてのビューとその一括操作を表示することもできます。
VBOがシェルで実行され、フィードバックが提供されます。
そこにすべて削除モジュールがあります。サイトからすべてのノードやユーザーを削除します。
Drushもサポートしています。
例:
drush delete-all article Delect all article nodes.
drush delete-all all Delete nodes of all types.
drush delete-all --reset Delete nodes of all types, and reset node, revision and comment counters.
drush delete-all users Delete users.
node_delete()
(使用することさえありませんnode_delete_multiple()
)。さらに心配なことに、フィールドAPIを使用せず、フックを使用せずにデータベーステーブルから直接データを削除するオプションがあります。バッチジョブはまったくありません。スクリプトが終了するまで実行されます。非常に危険なモジュール私見。
drush delete-all article
記事を削除できるようになった場合、私はこのソリューションに行きます。
ビューの一括操作を使用する-それは良い考えでした。ただし、操作を直接呼び出す代わりに、バッチAPIを使用します。ここでそれについての短い記事を読むことができます。その部分に関するドキュメントの欠如は既知の問題でした。
あなたの場合のように大量のノードを削除する(つまり、一括)には、一括削除モジュールを使用することもできます。
これは、Batch APIを使用してノードを削除し、node_delete_multiple()への1回の呼び出しで数千のノードを削除するときのタイムアウトまたはメモリの問題を回避します。
これとは別に、コンテンツタイプのすべてのノードを削除するために[すべて削除]モジュールを試すこともできます。
お役に立てれば。
Bobikのアドバイスを参考にして、ピンチの場合は「drush php-eval」の引数としてそれをフィードできますが、パフォーマンスはVBOのパフォーマンスに似ていると思われますが、少し高速です。パフォーマンスが本当に遅い場合は、「_ node_delete(」のコードベースをgreppingし、そのフックを使用している一部のモジュールを無効にできるかどうかを判断することによって、どのモジュールがhook_node_deleteを呼び出しているかを確認できます。