Microsoft SQL Server 総合スレ 11 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
Microsoft SQL Server (Transact-SQL) の総合スレッドです。
・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/
過去スレとかめんどいから誰か適当に貼って >>290
あ、そうなの?
最近PostgreSQLしかやってないから、他DBがどうなってるのか知らない 1回目もクエリだけやたら時間がかかるっていう経験ないですか?
2回目は速い
改善する方法あったら教えてください >>292
まずは、やたら時間がかかる原因を調べる。実行計画を見るとか。
そういうクエリ自身の問題ではない場合で、以下にあてはまるのなら、0回目のクエリを発行してデータをキャッシュにのせればいい。
(0回目:データベース起動後に重いクエリを実行するとか、テーブル全体を読んでキャッシュにのせるとか)
・単に対象データを物理ディスクから大量に読む必要がある
・なおかつ何回も類似クエリを発行する必要がある
・1回目が遅いのも改善したい
キャッシュミス多発なら、キャッシュサイズを拡大する。
ハード性能的に無理なら、より性能の良いハードに乗り換える。 今調べたら、Windows Serverは余裕でTBの領域に入ってるな。2016でmax 24TB。
メモリは32GB*4の128GBで17万程度。 ストアドにしたって、データのキャッシュミスは減らんと思うが
コンパイル時間で1回目だけやたら時間がかかるとか、どんな複雑なクエリ書いたらそうなるってんだ >>297
単にディスクからの読み込み量が多いだけでしょ
場合によっては、その読み込みが不要な場合もあるから、1回目のクエリから高速化できかもしれん >>298
データがキャッシュにヒットする以外に
ディスクからの読み込みが不要で高速化できる場合の具体例をあげてくれ >>299
説明不足ですまん。
ディスクからの読み込みがゼロになるということじゃなくて、不要な読み込みがなくなるかもという話。
例えば、
・インデックスがなくseq scan発生
・インデックスはあるがクエリがまずくてインデックスが使われずseq scan発生
とか。 >>300
それストアドにしたって解決されないわけだが
むしろ実行計画の生成タイミングで悪化する可能性もあるんじゃね
SQL Serverのストアドがいつ実行計画立てるかしらんけど >>301
ストアドは関係ないよ
クエリの内容そのものに問題があったり、indexを作ったりしたら読み込みページ数が減るかもねという話
なので、まずは実行計画を見るところから始めましょうということ 舐めるデータが多くて、初回はハードディスクから、2回目以降はキャッシュされたメモリーから
だから速度が違う
ストアドにすることで、コンマ何秒かは改善するかもしれないが、その程度
あとインデックスを見直すか ストアドストアド言ってる人は、90年代に生きてるんですかね >>305
実行時間短縮が目的でストアドを使う奴はいないだろうね 数百KBレベルのクエリなら、parse->palnningでコンマ何秒かかかるかもしれん >>306
関係ない事を言うのに俺にアンカつけんのやめてもらえんかな
俺までバカに見えるやろが >>308
>>305がバカな発言だと思ってないんだw >>309
だからなんだよ?
お前がそう思ってる事が今なんか関係あるのか?
バカしかいないのかここは >>310
> だからなんだよ?
>>305みたいなマヌケなレスするなってことだよ
そんなこともわからんバカなの? >>305
いつまでも暴れられると困るので。
> 今どきはストアド使わんのがトレンディなんか?
そういうトレンドはありません。 まあしかし、ORMの普及や回線速度の向上とかでストアド不要論が優勢な流れはあるかと
昔はトラフィック減らして速度向上させるためにストアドって流れはある事はあったからな >>311
だから関係ないレスでアンカつけんのやめてもらえんかな
俺までバカに見えるやろが >>313
SQLSeverと親和性高いC#がEF推しているのを見ると不要論が優勢でも不思議じゃないな >>313,315
ORMやEFが広まれば、よりストアドプロシージャ・ファンクションの需要が高まる気がするが。
ドメインロジックはサーバ側で実装し、クライアントはそれを使用するだけというスタイル。 そんな思想があったらRailsなんぞ流行らんわ
何処の時空の話だよ >>318
まぁ、RailsだろうがEFだろうが、データをどかっと取ってきて、クライアントコードで
ごりごりドメインロジックを実装するような層には関係ない話かな。 そんな話じゃねえよ
EFが何しにPOCOなんての売りにしてたかって話だ >>320
つまりは、
> データをどかっと取ってきて、クライアントコードで
> ごりごりドメインロジックを実装する
ということだろ?
POCOメインのプログラマには関係ない話だよ。
そんな話じゃないなら、どんな話なんだ? DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな >>322
> DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
なるほどね。
でも、ドメインロジックをデータベース側に寄せるか、クライアント側に寄せるかという問題は、
今でも存在する。ふるいも新しいもないと思うが。
> 開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな
それこそ、データベース側にドメインロジックの実装を寄せた方がいいのでは? 例えば、2003年のMartin Fowlerのブログポスト:
『ドメインロジックとSQL』
http://bliki-ja.github.io/DomainLogicAndSQL/
ここに書かれていることは、全然古いとは思わない。
逆に、自動生成されるコードをメインに使うようになる場合は、ドメインロジックを
ストアドファンクションで実装してViewにした方がいい場合も結構あると思うんだが。 昔々のウォーターフォールで上流で設計決まる時代ならそれもよかろうさ
だが今はデータ構造から卓袱台返される
その時アプリとDB両方に手ぇ入れるのと
アプリだけで済むのとどっちが早いか?
自明だろ DB側でごりごり書いたストアドって、InMemoryでUnitTestできるのかい? Web系とかで高速開発/デプロイな現場なら
コードファーストも面白いし効率あがりそうと思うけど
DevOpsの時代っても考えなしに書くでなし
結局はV字開発なんだからDB側でスキーマ決めるくらい
やれば?みたいな思いはあるな古い考えなんだろうけど
SIerソルジャーだから>>324もよくわかる
SQL一発取得+コーディングレスなアプローチが
楽/効率的な局面は現場じゃザラにあるよねえ
SSRS/PowerBIとかDataSpiderだの触るととくにそう
ストアド書いてぽちぽちするだけでけっこう
運用に耐えるもんできるし変更追従も保守も楽だしな
基幹から社内向けWebで集計帳票や明細表な要件なら
SQL以外のコーディング自体がそもそもバカバカしい >>327
純粋なコードファーストはある程度以上の規模だと使い物にならんと思ってた
スキーマはDB側でかっちり決めんと話にならんだろうと
これが古い考えだと言われればそうなんだろうかと思ってた
が、既存のデータベースからコードファーストなんて手法が出来た所を見ると
やはりスキーマをDB側で決めるのは今でも必要なんじゃないか
ストアドにいろんなものを閉じ込めるのは、手法の新旧で言えばそれこそ古い手法だと思う
ストアドの保守はアプリの保守よりコストが高いのが現状じゃないかと思う
ストアドの保守がアプリの保守より低コストだって言う所ならそれを採用するのもありなんだろうけど with(nolock)をselect文全てに付けるとヤヴァイ?
ググったらコミット前のデータが返ってくるとか
ページ分割が起こった場合行の重複や欠落が発生するとか書いてあるけど
今仕事で触ってる既存のselect文のコード全部そうなってる >>329
質問の真意が図りかねるが
>ストアドにいろんなものを閉じ込める
の事であるなら、たとえば
ビジネスロジックをストアドとして実装することや
DBアクセスの結果をストアドの帰りとすることでスキーマ変更をアプリに意識させないこと
などの手法を指してる
純粋にストアドの意味が分からないなら
DBに格納できる一連の手続きかな >>330
常に1スレッドからしか触られない前提なら別にヤバくない ストアドってPGのたしなみとして
できて当たり前だと思うけど
今の新人は>>329みたいなのが
多いのか。 >>333
誰も同時に触らないならnolock必要なくね?
何のために入れたのやら
何処かでnolock入れると速くなるよ!とかデッドロック回避できるよってのを聞いてよく考えずに入れたのか
同時に一人(1スレッド?)しか触らないなら
2つのロックが対立することは無いんだから >>335
nolock指定すれば雀の涙ほど速くなる
それ以外の理由? 知らんそんなものは管轄外だ Hyperーvのレプリカサーバーに入っているSQLSERVERもライセンスって必要ですか? >>337
OSのライセンスが2つ必要ならそりゃSQLServerのライセンスも同じじゃね >>338
ありがとうございました。
不要と理解しました >>333,335
スレッド一つでも複数コネクション持ってゴニョゴニョすると問題が出る気がする >>340
さすがにそれはない
まさかCOMMITせん訳でもあるまい? >>330
マルチスレッドの場合でも全トランザクションを
同期化してスレッドセーフにすればヤバくない >>341
コミットしてから次のトランザクション始めるならコネクション二つとか必要ないだろ
ようは同時実行するトランザクションがあるかどうかで、スレッドとか関係ないって話 スレッド内でトランザクション完了しないで別のトランザクション始めるとかどんな状況だよ
特にSQLServerだと無駄に昇格起こってMSDTCエラー起こすぞ スレッドがどうこうとか、あんまり関係ない。
別プロセスでも話は同じ。
要は、トランザクション分離レベルがダーティーリードになっても大丈夫かどうかで決定すべき。
ダーティーリードとは、自分以外の誰か(別プロセスも含む)のコミット前のデータを読むことに
なっても問題ないかどうかという話。 >>344
シーケンスなかった時に、連番とるためにやったことあるわ >>346
俺もよくやるよ。>>344が無知なだけ >>347-348
まさかと思うが入れ子トランザクションでドヤってんじゃあるまいな…? >>349
何のために別にコネクション(トランザクション)が必要か考えたら
入れ子トランザクションではダメなことぐらいわかるだろうに >>350
連番取るのにトランザクション外からやるっての?
ますますもって意味わからんぞ >>351
連番管理用のテーブルと、連番を利用するテーブルを別のテーブルにするんだよ
短時間で終わる連番の発行と、時間のかかる更新系の処理を別トランザクションにすることで
連番管理用のテーブルのロックを解放する 結論は何も考えずにnolock入れるつもりなら止めとけってことじゃないの >>354
今時の代替手段はどんなの?
>>356
何を懸念してるか知らんが問題ない
欠番の発生は想定内 >>358
> 今時の代替手段はどんなの?
シーケンスだろ >>362
違う
シーケンスとかIDENTITYは製品間で互換性無いって言ってんだろ 何でこの程度のことググらないのか、毎度ながら不思議 むしろお前が教えればいいだけなのにどうしてわざわざググらなければいかんのか https://goo.gl/q9Ml0S
これは嘘でしょ?本当だったら落ち込むわ。。 >>332
>「ストアド」 = 「DBに格納できる一連の手続き」
いかにもシステム屋さんな定義だなw >>374
では、君の素晴らしい定義を教えてもらおうかな いきなり答えあわせじゃおもしろくないから
「>>374に笑われない定義は何かな?」ゲームしようぜ べつに>>374の定義はどうでもいいけど
>>374が何屋さんを自称するのか気になるわ >>375-378
おいやめろw
俺はこの業界にどっぷりのただのIT土方だよ。
定義があまりにもプロっぽい(同業っぽい)からちょっとつついてみただけだw すみません。質問させてください。
CREATE PROCEDUREについて、
ストアドプロシージャが既に登録されていたらDROP後、CREATE→OK
ストアドプロシージャが既に登録されていたらなにもしない →NG
となるのはなぜなのでしょうか?
「https://technet.microsoft.com/ja-jp/library/ms175502(v=sql.105).aspx」の
「バッチの使用に関するルール」に「・・・CREATE ステートメントはバッチの最初に記述する必要があります」
とあるので構文エラーなのかなとは思うのですが、構文エラーとした理由はあるのでしょうか?
これは出来る
IF OBJECT_ID ( 'dbo.プロシージャ', 'P' ) IS NOT NULL BEGIN
DROP PROCEDURE dbo.プロシージャ
END
GO
CREATE PROCEDURE dbo.プロシージャ・・・
これはできない
IF OBJECT_ID ( 'dbo.プロシージャ', 'P' ) IS NULL BEGIN
CREATE PROCEDURE dbo.プロシージャ・・・ create or replace
じゃ不満なのか? 不満はないんだけど、なんでかなと。そういうものなんだと思っときます。 物凄く初歩的で申し訳ないのですが、SQL Server2008をSQL Server2014へ
アップグレードでインストールした後、不要な2008を消したいんですが
普通にアンインストールでいいものなんでしょうか。 >>383
たぶん良いんじゃないか。
結果を教えてくれ。 >>383ではないが
2008R2 Express SP3を2016 Expressにして、2008をアンインストールしてみた
軽く動かした感じでは動いてるっぽいけど
2008のアンインストールが色々手間だった
まあ実務マシンなら、俺ならアンインストールせずにスタートメニューだけ消しとく 俺なら2008アンインストール、2016インストールするけど Windows ServerでSQL Server 2012を入れております
SSMSでバックアップのスケジュールを確認しようとしたんですが管理にメンテナンスという項目がありません
SSMSを見てもExpressという表示はないんですが原因って他にありますか? ログインユーザーがsysadminじゃなかったってのは昔あったな https://msdn.microsoft.com/ja-jp/library/ms178127.aspx
Agent XPsが無効だとメンテナンスプランやらエージェント使えないんでは
あー、でもこれメンテナンスの項目は出てた気がするなあ ■ このスレッドは過去ログ倉庫に格納されています