Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。
・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/ >>125
目的は高速化しかないと思いますが・・・
投資の優先順位は
メモリー>ストレージ>CPU だと思ってます。
メモリーマンタンなので、次はストレージをと データベース丸ごとキャッシュに乗るべきと思って
96GB まで積み増したのですが、最近はストレージへのアクセスが増えてしまったので。 >>133
メモリ上のバッファキャッシュが多ければ、ストレージのIOデータ量も増える。
データ量が大きくなって遅くなっていることをハードウェアでどうにかしようとするのは根本的な解決になっていない。 データ量が増えてメモリを食うようになった⇒ストレージへの I/O が増えた状態への有効な対処法ってどんなのがあるんだろう。
素人な自分としてはこれは本気で知りたい。
まえに環境の検討をやってたときに、 tempdb を SSD 上に置いたことはあった。
結構かなり速かったよ。本番環境でやっていいかどうかは知らないけど。 >>135
まずは無駄な検索とか更新をしてないかとか
インデックスがちゃんと効いてるかの確認
あとは物理的に複数のデバイスに分割してI/O処理を分散する
そのとき各デバイスで片寄らないように配置するキーを上手く選ぶとか データが増え続けても性能問題は起こらないという発想がおかしい。
性能問題が発生してSSDにするというのは、その場しのぎでしかない。 >>136
ああなるほど。
ひとつのストレージの上でなんとかすることしか考えてなかったよ。
参考にします。ありがとう。 DB初心者なんですが、質問させてください。
最初のSQL Serverをインストールし、DB・テーブルの作成、レコードの挿入・更新・削除までやってみました。
次にプログラムからSQL Sv.を操作してみようと思い、C#からレコードやテーブルの操作をしてみました。
ここで気づいたのですが、実運用においてプログラムからDBを操作するケースって、基本的にはレコードの操作くらいでしょうか?
というのも、DB・テーブルの作成はシステムを構築する際には技術者がSSMSなどで行いうと思いますが、
プログラムがやることってシステムが稼働する段階になって、
ユーザーの操作に従ってレコードの挿入・更新・削除くらいかなと思いましたので。
DB技術者の先輩方、よろしくお願いいたします m(__)m >>139
一時テーブルを作るとか普通にあるけど?
てか、一番多いのは検索だと思うぞ >>140
一時的テーブルってどんなケースでしょうか?
自分がイメージしてるのは↓みたいな感じですが、実際こんな感じでしょうか?
例えば商品を扱う時に
◆登録時
商品(+カテゴリ)のレコードを追加、
もしくは既存レコードの数量を更新
◆検索
SELECT 〜 WHERE で商品検索。
表示されたものを並べ替える時に、上記SELECT分に ORDER BY 〜 を追加。 SQL serverをデータベースに使用している業務用アプリを
Windows7+SQL server 2008R2EXPRESSの環境で動かして
いましたが、今回、Windows10+SQL server 2016EXPRESSに
移行したところ、途端にアプリの動きが重くなりました。
いろいろ調べた結果、移行時に、SQL server 2016に2008R2の
データベース完全バックアップを復元した際に互換性レベルを
「2016」にしたことが原因で、これを「2008」に下げるとサクサク
動くようになりました。
そこで質問ですが、SQL server 2016EXPRESSに復元したDBの
互換性レベルを「2008」で動かしても特にリスクはないでしょうか?
そもそも互換性レベルは「2016」で動かす方が望ましいのでしょうか?
よろしくお願い致します >>142
調べたから見たはずだけど、2016を2008互換で動かしていたら、ただの問題の先送り。 >>142
暫定的にはいいけど、そのままだと次のバージョンアップの時に苦労するぞ >>143
>>144
ありがとうございます
さらにテストをしたら、互換性レベル2014までは正常に動きますが、
2016になった途端、動きが極端に重くなることが分かりました
問題の先送りにしかならないにしても、暫定措置としては、
なるべく互換性レベルは高い方がいいでしょうか?
それとも、2016でなければ、2008でも2014でもさほど変わりませんか? >>145
本当に互換性に問題のある使い方をしているのかどうかを調べるのが基本だよ。 >>145
便所の落書きに判断を求めるなよ
正攻法なら最新に合わせて改修するだけだし
コストがかけられないなら確実に動作する状態でリプレースを待つだけだろ そもそもそれホントに互換性レベルの問題なのか?
2016出てだいぶ立つから、メジャーな問題ならもっと話題になってると思うが 実行プランに影響するから>>142の環境だけで発生するとかもあり得る その後、同じ業務用アプリケーションで、以下のような環境移行を行い、
サーバ:Windows server 2008R2→Windows server 2016
SQL server:SQL server 2008R2→SQL server 2017
クライアント:Windows7→Windows10
互換性レベルをSQL server 2017にしたところ、やはり動きが
極端に重く(遅く)なり、互換性レベルをSQL server 2014に
下げると正常なスピードになりました
データベースがSQL server 2014までは互換性レベルなんて
意識したことなかったけど、SQL server 2016以降において
急に引っかかるようになった感じですね >>150
だから製品の何が変わったのかマイクロソフトの情報を見ているのか? どこのSQLで遅くなってるかとかの確認もしてないんだろ? 例えばどんなSQLがどのくらい遅くなったのか、そのときの実行計画は同じなのかぐらいは調べてさらせよ 確か遅いSQL一発で出せるやり方あったよな
事前にフラグ立てなきゃいけなかった気もするが 言っておくが彼はSQLが遅くなったとは一度も書いていない。 そもそも何も書いてないから切り分けろって言われてるんだが… DBでSQL実行が遅くなる以外に何が遅くなるって言うんだ…? >>160
可能性は低いだろうけど接続に時間がかかるようになったとかメモリー足りなくてスラッシング起きてるとか まあまずはなにがどう遅いか調べんと話にならん
あとはリストアしてからなにしたかだな
ほんとに互換性レベルだけで遅くなるとは思いにくい >>164
DBの機能が遅い以外何があるってんだよハゲ >>165
データベースは外部からSQLが発行されなくても、ただ動いているだけでもメモリ上のデータを定期的にファイルに書き込む。余裕があればファイルからデータを読み込む。
いっぱいあるがとにかくデータを失わない、データの整合性がとれなくならないようにする処理等があるんだよ。 >>166
で?
それはDBの機能じゃねえのか?
大体そんなバックグラウンド処理なんて四六時中走ってねーよこじつけんな Express版でオンラインバックアップ取る技ってないの? DBエンジニアの業務ってどんな感じですか?
↓みたいなイメージで合ってます?w
設計時:忙しい。責任重大。
開発中:DBのインストールやテーブルの作成が済めば、トラブルなければ特にやることない。
※開発中はC系のエンジニアなどがPG内にSQL文を書いてあれこれやるのをイメージしてます。
運用時:トラブルなければ特にやることない。
よろしくお願いいたします。 >>171
インフラ寄りなのか、アプリ寄りなのかでまったく違う。
ただ本来はどちらにも深く関わるのがまっとうなデータベースエンジニア。 ソフトの応答時間って結構重要なのに後回しにされがちなのね。
最後の最後で死にそうな顔して調整しまくってる DB エンジニアさんて結構ありがちと言うか。。。 >>173
そういう区別もあるんすね。ありがとうございます。
ちと調べてみまふ。 >>174
開発の上流から下流までチェックし続けないと、クソみたいなDB設計とクソSQLのてんこ盛りで、データ量が多いシステムだと死ぬ。 メンテナンスプランによる、インデックス再構築、統計の更新、完全バックアップあたりの
処理は毎日やってますか?
毎日やるのはバックアップだけですか? SSIS使いたいんだけど、SSDTをインストールしないといけない。
これは手持ちのクライアントPCにできないのかな?SSMSみたいに。
インストーラ立ち上げると「SQLServer データベース」が必須になっているよ。 >>177
完全バックアップ以外は週一でいいんじゃないの?
もちろん、DBのサイズや用途にもよるけど。たしか、ウィザードはそんな(週一)がデフォルトだったと思う。
うちは完全バックアップを毎日とっている。 >>178
SSISはSQL Serverが必要というよりは、Visual Studioが必要なんだよ。
Visual Studioは入ってるのか? >>178
SQL Serverは伝統的にサーバーソフトウェア、クライアントソフトウェアを作り分けていない。 >>180-181
サーバのリソース食うのは避けたいので、クライアントでパッケージ作成したかったの。
慌ててVS2019のCommunityインストールしてSSDT入れたら
要求されたメタファイル操作はサポートされていません。 (0x800707D3)
(涙) 最近VSCodeでSQL書いてるけどこれすげえいいな
補完もするし複数列にCASTだのISNULLだのつけるとき
マルチカーソルが便利すぎる
SQL発行の結果が帰ってくるのはManagement Studio
のが速いけどVSCodeのが起動速いし
実行計画見るときぐらいしかSSMS使わんくなった >>150
リプレース時の互換性レベルの変更は危険。
チューニング済みの SQLほど実行計画ボロボロになる。 ロール作成しようとしてるんだけど、Viewに対しては全DDL,DMLを許可し、Tableに対してはそれらを許可しない、っていう内容。
公式サイトをずっと見てるんだけど、オブジェクト単位で設定しないとダメなんだろうか。 なんかのソフトにバンドルされてるSQL serverてそれ単体でも使うことができる。
例というとPCに弥生会計をインスコしたらSQLserver2014SP2 ExpressEditionてのがインストールされたんだが。
同じPCにwordpress入れようと思うんだが、このSQLserver兼用できるのかな? ログインの認証周りが大丈夫ならいけるのでは
というかExpressインストールされるのはいいが、saにパスワード設定されていたら泣く 普通はWindows認証でadministratorで入れる 189ですが、1台のPCにSQL serverと弥生会計いれて、もう一台のPCに弥生会計を入れて、
2個の弥生会計からSQL serverをつつく作りになってるんだけど、
こういう場合て、ネットワークて同一セグメントで使うもの?
弥生会計の取説だと「同一セグメントで」て書いてあるんだが、ためにしもう一台をVPN接続越しで接続してみたり
SQL serverをAWSに置いてみたら激重になったんだが、DBてそういう使い方しないもの? >>195
今時の回線事情考えたら
DBの問題じゃなくアプリの設計の問題の可能性のが高い >>195
実際にできるできないはあなたの会社のセキュリティポリシーによるけど、
vpnで直接連携なんて怖くてやらない
同一セグメントでないとダメかといえばそんな事はない
しかし、FW、L3SWの設定はもちろん必須 弥生はどうか知らないが、SQL ServerをVPNの向こうに置いてもそれほど遅くならないよ。 AWSってSQLサーバのサービスをやってくれるの? >>196
アプリ設計の問題みたい。
https://yayoi-k.jp/yayoi-network/vpn/
DBを1拠点だけで突く設計みたい。複数拠点の場合はリモートデスクトップだ。 5席規模のデータ入力で
SQL Server Express使おうとしたら
「無償版とか信用ならん!!!」
って言って上司がライセンス購入しようとして聞かない
その割にベンダーからの見積もり30万って見て
高すぎ!安くして!と言ってくる
なんとかなりませんか、、、 >>201
「お前はバカか」と言ってやれ。
無償版が信用ならんのなら、オープンソースは全部だめ。
アンドロイド携帯もルータもNASもオープンソースだらけだぞってね。 >>201
言ってくるってお前の立場は何なんだよ
値段の文句は見積もり出したベンダーに言えよ >>203
おそらくベンダーのソフトの見積もりは妥当なもんだと思うよ。
作業料金とかの方でぼった食ってる場合が多い。 >>201
なぜSQL-Server Expressを入れようとしてる奴がベンダーから見積もり取ってるんだ?
普通にMSから直接買えばいいだろ
5席ぐらいならCAL入れても20万もかからん
https://www.microsoft.com/ja-jp/sql-server/sql-server-2017-pricing >>205
20万でも高いとか言われそうな案件の悪寒 >>201
だが皆レスありがとう。
こんだけ来るとは思ってなかったw
俺は案件に絡んでなくて
アドバイスを求められてるだけなんだ。
だからExpressを勧めた。
Expressを信頼できない無償版と言ったのは上司。
見積もりを取ったのは別の社員。
確かに作業費等々でボッタ食られてることも
伝えたんだけど金のこと言うなら
Express使えよって思ってさ… 経験浅いので教えて欲しいのですが
ストアドの中でテーブルAにデータをINSERTしているのですが
エラーが起きるとロールバックされて消えてしまいます。
これを消える前に取得する方法はあるでしょうか?
例えばロールバックされても消えない特殊なテーブルB(構造はAと同じ)を作っておいて
このテーブルBにもINSERTしておくとかは出来るのでしょうか?
そもそもそんなテーブルは作れないのかもしれませんが・・・ >>208
コミットすりゃいいんじゃね?
てか、何もしてなきゃinsert自体が成功してたらその後のエラーでロールバックなんてしないはずだが… >>208
問題なければINSERT直後にCOMMITしてしまうか
そもそもトランザクション処理をしなければ良い ストアド内ならエラーキャッチしてうにゃうにゃできるかもしれんが
まあトランザクションの設計が悪いな システム自体が巨大でストアドを入れ子で何階層も呼び出していて、割りと下位のストアドでエラーが起こっているのです。
業務データが壊れる可能性があるので中途半端な状態でコミットはできないです。
そもそも何階層目でトランザクションが開始されてるのかもわかりません・・・ >>207
Expressはdbのサイズが10GBまでという制限もあるから、そもそも収まるのかという話もあるけどね
アプリケーションのデータ格納用としては結構使われてるし、実績的には申し分ないよ
だけどサポートや問い合わせは受けられないので会社のルール的に保守契約できないものは採用できないって事はあるよね >>213
要件次第
Expressの1番の制限は>>214の言うDBサイズ
まあ10GBってそこそこのサイズだしインスタンスは複数作れるので工夫次第である程度回避できたりするけど
あとは使用するメモリーが制限されてるとかフェイルオーバーができないとかあるから自分で https://docs.microsoft.com/ja-jp/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-ver15 とかを見て判断すればいい そもそもそのテーブルの値をとってどうしたいんだ?
まあざっと思いつくと
エラーの出るところだけ子トランザクションにする
エラーキャッチしてなんとかする
@変数にとっておく
事前にコミットする
そんなとこか
思いつきだから実際どうかはそれぞれ試して決めろ
ストアド内から別トランザクションはちょっと難しいし、出来てもやるべきではない
ロールバックされないテーブルとかもない(シーケンスとかはロールバックされないけどな) いつのまにか、SSMSでストアドのデバッグできなくなってるんだが
みんなどうしてるんだ? Standard版だと40万円以上するのがExpress版だと無料って
一体どうなってんの、この会社? SQLOLEDB、MSDASQL、SQLNCLI11
接続プロバイダどれ使ってる SQLOLEDB
どこがどう変わるかよくわからん
プロパイダごとの機能差とかだれかまとめてくれ Windows10でSQLServer2017ExpressのDATAフォルダがエクスプローラで開けなくなりました。
コマンドプロンプト等でどうかは確認していません。
UACで警告されるのは知ってたんですが、インストール直後のデフォルトの状態で、フォルダが開けませんでした。
同型機を2台設定していて、1台は開くことができました。
C:\Windows\Tempも同様でした。