X



トップページDB@2ch掲示板
1002コメント327KB
Microsoft SQL Server 総合スレ 11 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/05/29(日) 16:50:08.13ID:dqKJQypQ
Microsoft SQL Server (Transact-SQL) の総合スレッドです。

・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/

過去スレとかめんどいから誰か適当に貼って
0291NAME IS NULL
垢版 |
2017/03/10(金) 11:42:27.96ID:???
>>290
あ、そうなの?
最近PostgreSQLしかやってないから、他DBがどうなってるのか知らない
0292NAME IS NULL
垢版 |
2017/03/28(火) 10:32:41.51ID:???
1回目もクエリだけやたら時間がかかるっていう経験ないですか?
2回目は速い
改善する方法あったら教えてください
0293NAME IS NULL
垢版 |
2017/03/28(火) 13:20:36.85ID:???
>>292
まずは、やたら時間がかかる原因を調べる。実行計画を見るとか。

そういうクエリ自身の問題ではない場合で、以下にあてはまるのなら、0回目のクエリを発行してデータをキャッシュにのせればいい。
(0回目:データベース起動後に重いクエリを実行するとか、テーブル全体を読んでキャッシュにのせるとか)
・単に対象データを物理ディスクから大量に読む必要がある
・なおかつ何回も類似クエリを発行する必要がある
・1回目が遅いのも改善したい

キャッシュミス多発なら、キャッシュサイズを拡大する。
ハード性能的に無理なら、より性能の良いハードに乗り換える。
0294NAME IS NULL
垢版 |
2017/03/28(火) 14:33:14.80ID:???
DBサイズくらいのメモリ積め
0295NAME IS NULL
垢版 |
2017/03/28(火) 14:55:00.82ID:???
今調べたら、Windows Serverは余裕でTBの領域に入ってるな。2016でmax 24TB。
メモリは32GB*4の128GBで17万程度。
0296NAME IS NULL
垢版 |
2017/03/28(火) 16:34:29.46ID:???
ストアドにしてコンパイル済みにする手もあるが
0297NAME IS NULL
垢版 |
2017/03/30(木) 00:46:03.18ID:???
ストアドにしたって、データのキャッシュミスは減らんと思うが
コンパイル時間で1回目だけやたら時間がかかるとか、どんな複雑なクエリ書いたらそうなるってんだ
0298NAME IS NULL
垢版 |
2017/03/30(木) 15:01:26.21ID:???
>>297
単にディスクからの読み込み量が多いだけでしょ
場合によっては、その読み込みが不要な場合もあるから、1回目のクエリから高速化できかもしれん
0299NAME IS NULL
垢版 |
2017/04/02(日) 18:33:09.18ID:???
>>298
データがキャッシュにヒットする以外に
ディスクからの読み込みが不要で高速化できる場合の具体例をあげてくれ
0300NAME IS NULL
垢版 |
2017/04/03(月) 13:31:22.61ID:???
>>299
説明不足ですまん。
ディスクからの読み込みがゼロになるということじゃなくて、不要な読み込みがなくなるかもという話。
例えば、
・インデックスがなくseq scan発生
・インデックスはあるがクエリがまずくてインデックスが使われずseq scan発生
とか。
0301NAME IS NULL
垢版 |
2017/04/04(火) 08:11:48.03ID:???
>>300
それストアドにしたって解決されないわけだが
むしろ実行計画の生成タイミングで悪化する可能性もあるんじゃね
SQL Serverのストアドがいつ実行計画立てるかしらんけど
0302NAME IS NULL
垢版 |
2017/04/04(火) 10:59:56.61ID:???
>>301
ストアドは関係ないよ
クエリの内容そのものに問題があったり、indexを作ったりしたら読み込みページ数が減るかもねという話
なので、まずは実行計画を見るところから始めましょうということ
0303NAME IS NULL
垢版 |
2017/04/04(火) 11:06:24.35ID:???
舐めるデータが多くて、初回はハードディスクから、2回目以降はキャッシュされたメモリーから
だから速度が違う

ストアドにすることで、コンマ何秒かは改善するかもしれないが、その程度

あとインデックスを見直すか
0304NAME IS NULL
垢版 |
2017/04/04(火) 11:23:43.06ID:???
ストアドストアド言ってる人は、90年代に生きてるんですかね
0305NAME IS NULL
垢版 |
2017/04/04(火) 12:18:00.83ID:???
今どきはストアド使わんのがトレンディなんか?
0306NAME IS NULL
垢版 |
2017/04/04(火) 13:22:41.59ID:???
>>305
実行時間短縮が目的でストアドを使う奴はいないだろうね
0307NAME IS NULL
垢版 |
2017/04/04(火) 14:30:20.24ID:???
数百KBレベルのクエリなら、parse->palnningでコンマ何秒かかかるかもしれん
0308NAME IS NULL
垢版 |
2017/04/04(火) 19:25:55.84ID:???
>>306
関係ない事を言うのに俺にアンカつけんのやめてもらえんかな
俺までバカに見えるやろが
0310NAME IS NULL
垢版 |
2017/04/05(水) 12:26:42.39ID:???
>>309
だからなんだよ?
お前がそう思ってる事が今なんか関係あるのか?
バカしかいないのかここは
0311NAME IS NULL
垢版 |
2017/04/05(水) 13:18:00.59ID:???
>>310
> だからなんだよ?
>>305みたいなマヌケなレスするなってことだよ
そんなこともわからんバカなの?
0312NAME IS NULL
垢版 |
2017/04/05(水) 13:28:16.18ID:???
>>305
いつまでも暴れられると困るので。
> 今どきはストアド使わんのがトレンディなんか?
そういうトレンドはありません。
0313NAME IS NULL
垢版 |
2017/04/05(水) 20:27:50.95ID:???
まあしかし、ORMの普及や回線速度の向上とかでストアド不要論が優勢な流れはあるかと
昔はトラフィック減らして速度向上させるためにストアドって流れはある事はあったからな
0314NAME IS NULL
垢版 |
2017/04/05(水) 21:15:40.39ID:???
>>311
だから関係ないレスでアンカつけんのやめてもらえんかな
俺までバカに見えるやろが
0315NAME IS NULL
垢版 |
2017/04/05(水) 21:58:10.55ID:???
>>313
SQLSeverと親和性高いC#がEF推しているのを見ると不要論が優勢でも不思議じゃないな
0317NAME IS NULL
垢版 |
2017/04/06(木) 10:50:33.00ID:???
>>313,315
ORMやEFが広まれば、よりストアドプロシージャ・ファンクションの需要が高まる気がするが。
ドメインロジックはサーバ側で実装し、クライアントはそれを使用するだけというスタイル。
0318NAME IS NULL
垢版 |
2017/04/06(木) 13:19:00.97ID:???
そんな思想があったらRailsなんぞ流行らんわ
何処の時空の話だよ
0319NAME IS NULL
垢版 |
2017/04/06(木) 13:59:58.76ID:???
>>318
まぁ、RailsだろうがEFだろうが、データをどかっと取ってきて、クライアントコードで
ごりごりドメインロジックを実装するような層には関係ない話かな。
0320NAME IS NULL
垢版 |
2017/04/06(木) 14:11:49.32ID:???
そんな話じゃねえよ
EFが何しにPOCOなんての売りにしてたかって話だ
0321NAME IS NULL
垢版 |
2017/04/06(木) 15:42:00.99ID:???
>>320
つまりは、
> データをどかっと取ってきて、クライアントコードで
> ごりごりドメインロジックを実装する
ということだろ?
POCOメインのプログラマには関係ない話だよ。

そんな話じゃないなら、どんな話なんだ?
0322NAME IS NULL
垢版 |
2017/04/06(木) 15:53:14.04ID:???
DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな
0323NAME IS NULL
垢版 |
2017/04/06(木) 15:58:59.46ID:???
>>322
> DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
なるほどね。
でも、ドメインロジックをデータベース側に寄せるか、クライアント側に寄せるかという問題は、
今でも存在する。ふるいも新しいもないと思うが。

> 開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな
それこそ、データベース側にドメインロジックの実装を寄せた方がいいのでは?
0324NAME IS NULL
垢版 |
2017/04/06(木) 16:05:36.81ID:???
例えば、2003年のMartin Fowlerのブログポスト:
『ドメインロジックとSQL』
http://bliki-ja.github.io/DomainLogicAndSQL/

ここに書かれていることは、全然古いとは思わない。
逆に、自動生成されるコードをメインに使うようになる場合は、ドメインロジックを
ストアドファンクションで実装してViewにした方がいい場合も結構あると思うんだが。
0325NAME IS NULL
垢版 |
2017/04/06(木) 16:19:28.98ID:???
昔々のウォーターフォールで上流で設計決まる時代ならそれもよかろうさ
だが今はデータ構造から卓袱台返される
その時アプリとDB両方に手ぇ入れるのと
アプリだけで済むのとどっちが早いか?
自明だろ
0326NAME IS NULL
垢版 |
2017/04/06(木) 18:53:09.88ID:???
DB側でごりごり書いたストアドって、InMemoryでUnitTestできるのかい?
0327NAME IS NULL
垢版 |
2017/04/06(木) 20:44:49.38ID:???
Web系とかで高速開発/デプロイな現場なら
コードファーストも面白いし効率あがりそうと思うけど
DevOpsの時代っても考えなしに書くでなし
結局はV字開発なんだからDB側でスキーマ決めるくらい
やれば?みたいな思いはあるな古い考えなんだろうけど

SIerソルジャーだから>>324もよくわかる
SQL一発取得+コーディングレスなアプローチが
楽/効率的な局面は現場じゃザラにあるよねえ

SSRS/PowerBIとかDataSpiderだの触るととくにそう
ストアド書いてぽちぽちするだけでけっこう
運用に耐えるもんできるし変更追従も保守も楽だしな
基幹から社内向けWebで集計帳票や明細表な要件なら
SQL以外のコーディング自体がそもそもバカバカしい
0328NAME IS NULL
垢版 |
2017/04/08(土) 22:23:48.60ID:???
>>327
純粋なコードファーストはある程度以上の規模だと使い物にならんと思ってた
スキーマはDB側でかっちり決めんと話にならんだろうと

これが古い考えだと言われればそうなんだろうかと思ってた
が、既存のデータベースからコードファーストなんて手法が出来た所を見ると
やはりスキーマをDB側で決めるのは今でも必要なんじゃないか

ストアドにいろんなものを閉じ込めるのは、手法の新旧で言えばそれこそ古い手法だと思う
ストアドの保守はアプリの保守よりコストが高いのが現状じゃないかと思う
ストアドの保守がアプリの保守より低コストだって言う所ならそれを採用するのもありなんだろうけど
0330NAME IS NULL
垢版 |
2017/04/09(日) 18:40:23.01ID:???
with(nolock)をselect文全てに付けるとヤヴァイ?
ググったらコミット前のデータが返ってくるとか
ページ分割が起こった場合行の重複や欠落が発生するとか書いてあるけど
今仕事で触ってる既存のselect文のコード全部そうなってる
0331NAME IS NULL
垢版 |
2017/04/09(日) 19:22:13.71ID:???
ヤバイかどうかは業務内容による
0332NAME IS NULL
垢版 |
2017/04/10(月) 14:48:01.02ID:???
>>329
質問の真意が図りかねるが
>ストアドにいろんなものを閉じ込める
の事であるなら、たとえば
ビジネスロジックをストアドとして実装することや
DBアクセスの結果をストアドの帰りとすることでスキーマ変更をアプリに意識させないこと
などの手法を指してる

純粋にストアドの意味が分からないなら
DBに格納できる一連の手続きかな
0333NAME IS NULL
垢版 |
2017/04/10(月) 15:17:23.17ID:???
>>330
常に1スレッドからしか触られない前提なら別にヤバくない
0334NAME IS NULL
垢版 |
2017/04/10(月) 22:02:15.03ID:mMYNtWws
ストアドってPGのたしなみとして
できて当たり前だと思うけど
今の新人は>>329みたいなのが
多いのか。
0335NAME IS NULL
垢版 |
2017/04/11(火) 07:27:15.05ID:???
>>333
誰も同時に触らないならnolock必要なくね?
何のために入れたのやら

何処かでnolock入れると速くなるよ!とかデッドロック回避できるよってのを聞いてよく考えずに入れたのか

同時に一人(1スレッド?)しか触らないなら
2つのロックが対立することは無いんだから
0336NAME IS NULL
垢版 |
2017/04/11(火) 13:39:32.49ID:???
>>335
nolock指定すれば雀の涙ほど速くなる
それ以外の理由? 知らんそんなものは管轄外だ
0337NAME IS NULL
垢版 |
2017/04/11(火) 19:12:06.12ID:???
Hyperーvのレプリカサーバーに入っているSQLSERVERもライセンスって必要ですか?
0338NAME IS NULL
垢版 |
2017/04/11(火) 19:42:30.31ID:???
>>337
OSのライセンスが2つ必要ならそりゃSQLServerのライセンスも同じじゃね
0339NAME IS NULL
垢版 |
2017/04/11(火) 20:03:02.82ID:???
>>338
ありがとうございました。
不要と理解しました
0340NAME IS NULL
垢版 |
2017/04/12(水) 01:11:00.92ID:???
>>333,335
スレッド一つでも複数コネクション持ってゴニョゴニョすると問題が出る気がする
0341NAME IS NULL
垢版 |
2017/04/12(水) 03:42:34.42ID:???
>>340
さすがにそれはない
まさかCOMMITせん訳でもあるまい?
0342NAME IS NULL
垢版 |
2017/04/12(水) 06:15:01.88ID:???
>>330
マルチスレッドの場合でも全トランザクションを
同期化してスレッドセーフにすればヤバくない
0343NAME IS NULL
垢版 |
2017/04/13(木) 00:21:38.38ID:???
>>341
コミットしてから次のトランザクション始めるならコネクション二つとか必要ないだろ
ようは同時実行するトランザクションがあるかどうかで、スレッドとか関係ないって話
0344NAME IS NULL
垢版 |
2017/04/13(木) 14:55:41.05ID:???
スレッド内でトランザクション完了しないで別のトランザクション始めるとかどんな状況だよ
特にSQLServerだと無駄に昇格起こってMSDTCエラー起こすぞ
0345NAME IS NULL
垢版 |
2017/04/13(木) 15:49:12.08ID:???
スレッドがどうこうとか、あんまり関係ない。
別プロセスでも話は同じ。

要は、トランザクション分離レベルがダーティーリードになっても大丈夫かどうかで決定すべき。
ダーティーリードとは、自分以外の誰か(別プロセスも含む)のコミット前のデータを読むことに
なっても問題ないかどうかという話。
0346NAME IS NULL
垢版 |
2017/04/13(木) 17:00:25.60ID:???
>>344
シーケンスなかった時に、連番とるためにやったことあるわ
0349NAME IS NULL
垢版 |
2017/04/13(木) 19:49:56.90ID:???
>>347-348
まさかと思うが入れ子トランザクションでドヤってんじゃあるまいな…?
0350NAME IS NULL
垢版 |
2017/04/13(木) 20:10:39.13ID:???
>>349
何のために別にコネクション(トランザクション)が必要か考えたら
入れ子トランザクションではダメなことぐらいわかるだろうに
0351NAME IS NULL
垢版 |
2017/04/13(木) 20:15:54.97ID:???
>>350
連番取るのにトランザクション外からやるっての?
ますますもって意味わからんぞ
0352NAME IS NULL
垢版 |
2017/04/13(木) 21:36:54.46ID:???
>>351
連番管理用のテーブルと、連番を利用するテーブルを別のテーブルにするんだよ
短時間で終わる連番の発行と、時間のかかる更新系の処理を別トランザクションにすることで
連番管理用のテーブルのロックを解放する
0355NAME IS NULL
垢版 |
2017/04/14(金) 11:06:49.82ID:???
結論は何も考えずにnolock入れるつもりなら止めとけってことじゃないの
0358NAME IS NULL
垢版 |
2017/04/14(金) 20:02:12.33ID:???
>>354
今時の代替手段はどんなの?

>>356
何を懸念してるか知らんが問題ない
欠番の発生は想定内
0360NAME IS NULL
垢版 |
2017/04/14(金) 20:31:11.74ID:???
>>358
> 今時の代替手段はどんなの?
シーケンスだろ
0361NAME IS NULL
垢版 |
2017/04/14(金) 21:37:16.31ID:???
シーケンス互換性ないじゃん
0362NAME IS NULL
垢版 |
2017/04/15(土) 14:02:49.32ID:???
>>361
シーケンスと何が互換性ないって?
0363NAME IS NULL
垢版 |
2017/04/16(日) 08:42:49.91ID:???
>>362
違う
シーケンスとかIDENTITYは製品間で互換性無いって言ってんだろ
0364NAME IS NULL
垢版 |
2017/04/17(月) 00:45:52.25ID:???
今の流れでそれがどうだと?
0365NAME IS NULL
垢版 |
2017/04/17(月) 13:04:14.32ID:???
シーケンスって…なに?
0367NAME IS NULL
垢版 |
2017/04/17(月) 16:51:13.99ID:???
何でこの程度のことググらないのか、毎度ながら不思議
0368NAME IS NULL
垢版 |
2017/04/18(火) 12:21:23.47ID:???
むしろお前が教えればいいだけなのにどうしてわざわざググらなければいかんのか
0369NAME IS NULL
垢版 |
2017/04/18(火) 13:06:43.50ID:???
教えてくれる奴が来るまで待つとか馬鹿でしょ
0370NAME IS NULL
垢版 |
2017/04/18(火) 19:21:58.59ID:???
いや待てよ勝手に理解したつもりになるな
0371ich1
垢版 |
2017/04/21(金) 16:41:35.14ID:R/eXxgbc
https://goo.gl/q9Ml0S
これは嘘でしょ?本当だったら落ち込むわ。。
0373NAME IS NULL
垢版 |
2017/04/25(火) 22:38:34.87ID:???
最近DB触り始めたんですが、チューニング的なことをする必要が出てきてT-SQLを知りたいです
例:)http://outofmem.tumblr.com/post/77053433681/sql-serverdb%E5%86%85%E3%81%A7%E7%99%BA%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%9Fsql%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B
↑こんなふうにシステムビューとか含めてリファレンス的に読める本があれば教えて欲しいんですがどうですか

調べてもゼロ年代の本しかなくて、いきなり買うのも勇気がいります……
ちなみに日本語しかダメです
0374NAME IS NULL
垢版 |
2017/04/25(火) 23:17:16.27ID:???
>>332
>「ストアド」 = 「DBに格納できる一連の手続き」

いかにもシステム屋さんな定義だなw
0375NAME IS NULL
垢版 |
2017/04/26(水) 12:56:31.64ID:???
>>374
では、君の素晴らしい定義を教えてもらおうかな
0376NAME IS NULL
垢版 |
2017/04/26(水) 20:31:45.30ID:yyy4jyWJ
いきなり答えあわせじゃおもしろくないから
>>374に笑われない定義は何かな?」ゲームしようぜ
0377NAME IS NULL
垢版 |
2017/04/26(水) 22:45:55.34ID:???
べつに>>374の定義はどうでもいいけど
>>374が何屋さんを自称するのか気になるわ
0379374
垢版 |
2017/04/29(土) 01:07:23.45ID:???
>>375-378
おいやめろw
俺はこの業界にどっぷりのただのIT土方だよ。
定義があまりにもプロっぽい(同業っぽい)からちょっとつついてみただけだw
0380NAME IS NULL
垢版 |
2017/04/29(土) 09:51:21.13ID:???
すみません。質問させてください。
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.プロシージャ・・・
0381NAME IS NULL
垢版 |
2017/04/29(土) 19:13:45.28ID:SlYPafLa
create or replace
じゃ不満なのか?
0382NAME IS NULL
垢版 |
2017/04/29(土) 20:46:20.98ID:???
不満はないんだけど、なんでかなと。そういうものなんだと思っときます。
0383NAME IS NULL
垢版 |
2017/05/07(日) 03:32:11.96ID:???
物凄く初歩的で申し訳ないのですが、SQL Server2008をSQL Server2014へ
アップグレードでインストールした後、不要な2008を消したいんですが
普通にアンインストールでいいものなんでしょうか。
0384NAME IS NULL
垢版 |
2017/05/07(日) 06:15:58.60ID:???
>>383
たぶん良いんじゃないか。
結果を教えてくれ。
0385NAME IS NULL
垢版 |
2017/05/10(水) 00:57:31.27ID:???
>>383ではないが
2008R2 Express SP3を2016 Expressにして、2008をアンインストールしてみた
軽く動かした感じでは動いてるっぽいけど
2008のアンインストールが色々手間だった

まあ実務マシンなら、俺ならアンインストールせずにスタートメニューだけ消しとく
0386NAME IS NULL
垢版 |
2017/05/10(水) 21:21:25.38ID:???
俺なら2008アンインストール、2016インストールするけど
0387NAME IS NULL
垢版 |
2017/05/11(木) 19:47:33.46ID:XdKWiRE4
Windows ServerでSQL Server 2012を入れております
SSMSでバックアップのスケジュールを確認しようとしたんですが管理にメンテナンスという項目がありません
SSMSを見てもExpressという表示はないんですが原因って他にありますか?
0388NAME IS NULL
垢版 |
2017/05/11(木) 19:51:28.91ID:???
ログインユーザーがsysadminじゃなかったってのは昔あったな
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況