先日、自分のアプリが、DashboardやQuota Detailsでみたときに、100%で(Free
Quotaでの)Limited状態となっていました。
ところが、Datastore StatisticsやDatastore Adminで確認した限り、容量は
合計しても約400MBであり1.00GBの制限にかかりそうに思えなかったのですが
これはこういうものなのでしょうか?
いくらなんでも容量が目安の半分以下でQuotaにかかるとは考え辛いようにも
感じるのですが……。
なお、約400MB中約340MBが1種類のモデル(db.Model)で占められておりました。
※平均サイズが2KB強・約16万件強のデータ。
また、上記のデータを簡便に削除する方法はありますでしょうか?
とりあえず500件ずつ削除するような処理で試したところ、約6万件弱を削除
したところで、6.50 CPU Hoursを使い果たしてしまい……。
※500件削除辺り約200000cpu_ms=200cpu_sec……こんなにかかるもの?
Datastore Adminの機能で一括削除がありますが、
http://code.google.com/intl/en/appengine/docs/adminconsole/datastoreadmin.html#Deleting_Entities_in_Bulk
に
| Warning! Deleting entities in bulk happens within your application,
and thus counts against your quota.
とあったので、途中でCPU Timeを使い果たしておかしなことになったらと思い
怖くて試せていません……。
--
このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
うーん、試しに作って放置してあったアプリなもので今更かな、という感じなのです
よね(苦笑)。
とりあえず Datastore にデータを置かなくても動くように改修してしまいましたし。
| > ところが、Datastore StatisticsやDatastore Adminで確認した限り、容量は
| > 合計しても約400MBであり1.00GBの制限にかかりそうに思えなかったのですが
| > これはこういうものなのでしょうか?
| > いくらなんでも容量が目安の半分以下でQuotaにかかるとは考え辛いようにも
| > 感じるのですが……。
| >
|
| task の payload なども全体の storage quota に関係してきます。そちらはどうでしょう。
| それでもおかしいということでしたら app-id を教えていただけますか?調べてみます。
| app-id はグループ宛に送信するのが気になるようでしたら個人宛でも良いです。
taskのpayloadとはDashboard/Quota Detailsで確認できる項目でしょうか?
すみません、どこを見ればよいか解らなかったので……。
※なお、Total Stored Data以外のStorageの項目は、ほぼ0に近い値です。
とりあえず、app-idは hatena-anohito になります。
あ、それと現在は30分に1回、500件を削除するようなCron Jobが走っているため、
下記記載値よりも徐々に減少してきております。
※ 500件/30分→24000件/日→約50MB/日→約0.05GB/日ずつ減少する計算です。
※ 2011/05/13 日本時間23時過ぎで、Datastore Adminの dbUserInfo は
Entities 86,010 Avg. Size/Entity 2 KBytes Total Size 179 MBytes
(これの他は8MB程)
Total Stored Dataは77%で0.77 of 1.00 GBytes
と表示されています。
※ 2011/05/20 現在、当該エントリは削除完了しており、
Total Stored Dataは 7%で0.07 of 1.00 GBytes
と表示されています。
以下、Billing Historyより。
Usage Report for 2011-05-09: Stored Data: 1.01
Usage Report for 2011-05-10: Stored Data: 0.76
Usage Report for 2011-05-11: Stored Data: 0.58
Usage Report for 2011-05-12: Stored Data: 0.40
Usage Report for 2011-05-13: Stored Data: 0.26
Usage Report for 2011-05-14: Stored Data: 0.16
Usage Report for 2011-05-15: Stored Data: 0.07
1.01GB→0.07GBで、0.94GB容量が減っていることになりますが、この間に削除した
データは実際には合計約340MB(平均2KB強・約16万件強のエントリ)に過ぎません。
差分の約0.6GBは何に相当する値なのでしょう?
課金を検討する上でも、Datastore Statistics/Datastore Adminで表示されるSizeと
Quota Details/Billing HistoryのStored Dataの値がここまでかけ離れていては少々
不安になってしまいます。
| > なお、約400MB中約340MBが1種類のモデル(db.Model)で占められておりました。
| > ※平均サイズが2KB強・約16万件強のデータ。
| >
| > また、上記のデータを簡便に削除する方法はありますでしょうか?
| > とりあえず500件ずつ削除するような処理で試したところ、約6万件弱を削除
| > したところで、6.50 CPU Hoursを使い果たしてしまい……。
| > ※500件削除辺り約200000cpu_ms=200cpu_sec……こんなにかかるもの?
| >
|
| Entity に付いている Index が多かったりしますか?
| 僕の経験からも多すぎるように思いますけれど、どのように削除をしていますか?
dbUserInfoというモデルですが、こちらにはIndexは作成しておりません。
※Datastore Indexesは別テーブル用のものが二つだけです。
削除は、
entries=dbUserInfo.all().fetch(500)
db.delete(entries)
のように500件ずつ削除する処理を、taskqueueで順次呼び出すような処理にしていま
した。
※上述のように、アプリの作りを変更した結果、全データを削除して構わなくなった
ため、単純な処理になっております。
| > Datastore Adminの機能で一括削除がありますが、
| >
| > http://code.google.com/intl/en/appengine/docs/adminconsole/datastoreadmin.html#Deleting_Entities_in_Bulk
| > に
| > | Warning! Deleting entities in bulk happens within your
application,
| > and thus counts against your quota.
| >
| > とあったので、途中でCPU Timeを使い果たしておかしなことになったらと思い
| > 怖くて試せていません……。
| >
|
| CPU Time を使い果たしても Task が失敗するようになるだけで、翌日になれば動き出すはずですよ。
普通にアプリやremote_apiで削除する場合と同様と考えてよいのですね。
もっとも約6万件削除でFreeでは1日使えなくなるので、全データ(16万件)削除だと3日
間弱、実質全く使えなくなってしまう計算ですが(苦笑)。
| まあ CPU の課金レートも安いので少し予算を割り当ててはいかがですか?
$0.10/CPU hourをどう考えるか、ですよね……。
上記の例では、10万件のエントリ削除で約11cpu_hours、約$1.1かかるわけで。
本運用サービスがOver Quotaで停まるリスクを考えると$1.1なんて安いものととるか、
高々10万件のデータ削除程度で$1以上かかるのか、と驚くか。
自分が日常的に使用するアプリなら考えるのですが、試行品の場合はなかなかその気に
ならず……申し訳ありません。
On 5月13日, 午後10:54, Takashi Matsuo ♟ <tmat...@google.com> wrote:
> On Fri, May 13, 2011 at 6:26 AM, 風柳 <fury...@gmail.com> wrote:
> > 先日、自分のアプリが、DashboardやQuota Detailsでみたときに、100%で(Free
> > Quotaでの)Limited状態となっていました。
>
> storage の課金額は非常に安いので少し予算をあてがってみてはいかがですか?
>
>
>
> > ところが、Datastore StatisticsやDatastore Adminで確認した限り、容量は
> > 合計しても約400MBであり1.00GBの制限にかかりそうに思えなかったのですが
> > これはこういうものなのでしょうか?
> > いくらなんでも容量が目安の半分以下でQuotaにかかるとは考え辛いようにも
> > 感じるのですが……。
>
> task の payload なども全体の storage quota に関係してきます。そちらはどうでしょう。
> それでもおかしいということでしたら app-id を教えていただけますか?調べてみます。
> app-id はグループ宛に送信するのが気になるようでしたら個人宛でも良いです。
>
>
>
> > なお、約400MB中約340MBが1種類のモデル(db.Model)で占められておりました。
> > ※平均サイズが2KB強・約16万件強のデータ。
>
> > また、上記のデータを簡便に削除する方法はありますでしょうか?
> > とりあえず500件ずつ削除するような処理で試したところ、約6万件弱を削除
> > したところで、6.50 CPU Hoursを使い果たしてしまい……。
> > ※500件削除辺り約200000cpu_ms=200cpu_sec……こんなにかかるもの?
>
> Entity に付いている Index が多かったりしますか?
> 僕の経験からも多すぎるように思いますけれど、どのように削除をしていますか?
>
> > Datastore Adminの機能で一括削除がありますが、
>
> >http://code.google.com/intl/en/appengine/docs/adminconsole/datastorea...
イアンです。
> | まあ CPU の課金レートも安いので少し予算を割り当ててはいかがですか?
>
> $0.10/CPU hourをどう考えるか、ですよね……。
> 上記の例では、10万件のエントリ削除で約11cpu_hours、約$1.1かかるわけで。
> 本運用サービスがOver Quotaで停まるリスクを考えると$1.1なんて安いものととるか、
> 高々10万件のデータ削除程度で$1以上かかるのか、と驚くか。
>
> 自分が日常的に使用するアプリなら考えるのですが、試行品の場合はなかなかその気に
> ならず……申し訳ありません。
10万件を削除するのが11CPU時間かかるのがそもそもおかしいようなきがしますね。僕は12個親エンティティに対して1分間毎にエンティティを作成して、毎日一日分のエンティティをタスクキューでまとめて削除しているアプリを運用していますが、全部で 3、4CPU 時間くらいかかるものです。60*24*12 = やく17万件。
データストアが遅れたりする感じなんでしょうか? 他にCPU時間をなめている処理がないよね? urlfetch とか。
エンティティはプロパティに対してインデクスが作成されるので、プロパティが多いと思うより大きいデータ量になるとおもいます。相当な数にいかない限り大丈夫と思うけど、プロパティが多くありませんか?
とにかく、11時間はかかり過ぎるので、何か情報足りないような気がします。
イアンです。
> > | > とりあえず500件ずつ削除するような処理で試したところ、約6万件弱を削除
> > | > したところで、6.50 CPU Hoursを使い果たしてしまい……。
> > | > ※500件削除辺り約200000cpu_ms=200cpu_sec……こんなにかかるもの?
>
> 1件削除あたりで400msですね。
> 特に違和感ある数字ではないです。
補足ですが、1件あたり400msがかなり遅いと思いますよ。
| 全部で 3、4CPU 時間くらいかかるものです。60*24*12 = やく17万件。
あれ、通常はその程度なんでしょうか……。
だとすると、私のケースはやはり少し変な気がしますね。
| データストアが遅れたりする感じなんでしょうか? 他にCPU時間をなめている処理がないよね? urlfetch とか。
ないです。
特に後半は、cronで1分あたり500件削除するだけのシンプルな処理でしたが、やはり
一貫して1回につき200,000cpu_ms前後を要していました。
| プロパティが多くありませんか?
上でも書きましたが、プロパティは9個です(なお、ListPropertyは持っていません)。
On 5月21日, 午前12:24, Ian Lewis <ianmle...@gmail.com> wrote:
> イアンです。
>
> > | まあ CPU の課金レートも安いので少し予算を割り当ててはいかがですか?
>
> > $0.10/CPU hourをどう考えるか、ですよね……。
> > 上記の例では、10万件のエントリ削除で約11cpu_hours、約$1.1かかるわけで。
> > 本運用サービスがOver Quotaで停まるリスクを考えると$1.1なんて安いものととるか、
> > 高々10万件のデータ削除程度で$1以上かかるのか、と驚くか。
>
> > 自分が日常的に使用するアプリなら考えるのですが、試行品の場合はなかなかその気に
> > ならず……申し訳ありません。
>
> 10万件を削除するのが11CPU時間かかるのがそもそもおかしいようなきがしますね。僕は12個親エンティティに対して1分間毎にエンティティを作成して、毎 日一日分のエンティティをタスクキューでまとめて削除しているアプリを運用していますが、全部で
イアンです。
すみません。僕は大きな勘違いをしました。僕はremote_api を使っていません。remote_api を使うとエンティティのデータをHTTP で通信のするので大きな負荷がかかってしまいます。
特にこういう処理をするとデータを全てクライアントまで通信する。もし、どうしても remote_api を使わないといけなければ、najeiraさんがおっしゃったようにkeys _only を使うのがおすすめです。
私がしている方法は全てappengine上で動かす方法でマッパークラスでエンティティを回わってバッチで削除するという方法です。
remote_api はたまにつかってもいいけれど、大きなデータ量を通信してしまうと大きな負荷かかるので、定期的に行うバッチ処理に使うのがおすすめできません。
勘違いをしてしまって申し訳ありません。