AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-47836

David Thielen's questions

Martin Hope
David Thielen
Asked: 2024-12-07 12:38:24 +0800 CST

Fornece uma visão limitada dos dados no SQL Server

  • 5

Tenho um aplicativo que é multi-tenant. Então, um único banco de dados tem dados para todas as organizações que o usam.

Existe uma maneira de fornecer acesso ao banco de dados para que meus clientes possam se conectar a ele com qualquer ferramenta de análise, como o Power BI?

Há a tabela Org - onde posso especificar o PK dessa tabela que eles podem obter.

Depois, há a tabela Event, onde há um FK para a tabela Org.

E então uma tabela de inscrição (para o evento) que tem um FK para o evento e um FK para o usuário.

E o mais difícil é a tabela de usuários. Se o usuário estiver inscrito para um evento, então esse cliente pode obter esse usuário. O que significa que vários clientes podem ver essa linha da tabela de usuários.

Isto é especificamente SQL Server. Então eu precisaria criar alguma visão que determinasse quais registros de usuário um dado usuário pode visualizar. Enquanto eu poderia duplicar o Ord PK na tabela Event, o registro de usuário, como vários clientes podem obtê-lo - não funcionará com um FK adicionado.

Existe uma maneira de fazer isso?

sql-server
  • 1 respostas
  • 31 Views
Martin Hope
David Thielen
Asked: 2024-07-12 03:21:23 +0800 CST

Consulta simples demorando muito

  • 5

Eu tenho uma consulta simples, usando uma coluna indexada, em um conjunto de dados muito pequeno, retornando 1 linha, atingindo o Banco de Dados SQL do Azure - ocupando mais de meio segundo. Outra execução anterior desta consulta levou 38 ms.

Plano de Execução (obrigado JD)

A pergunta:

SELECT [a].[Id], [a].[ClaimType], [a].[ClaimValue], [a].[UserId]
FROM [AspNetUserClaims] AS [a]
WHERE [a].[UserId] = @__id_0

Existem 36 linhas no banco de dados. O UserId é uma string que é um GUID. O ClaimType e ClaimValue são strings com 1 a 35 caracteres.

O UserId é indexado. insira a descrição da imagem aqui

2 linhas de dados:

Id  ClaimType   ClaimValue  UserId
5   SysAdmin    *   e69fac60-ea9b-4f73-8c7b-4cb75ec9721a
6   Admin   Arapahoe    e69fac60-ea9b-4f73-8c7b-4cb75ec9721a

Como faço para descobrir por que a leitura lenta (às vezes)?

sql-server
  • 1 respostas
  • 87 Views
Martin Hope
David Thielen
Asked: 2024-06-26 02:03:36 +0800 CST

Como posso medir a capacidade de resposta do banco de dados SQL

  • 4

Estou testando meu aplicativo Web, que é o Azure App Server + o Banco de Dados SQL do Azure.

Estou observando as métricas do painel de dados do Azure à medida que o testamos e a maioria das medidas (porcentagem de DTU, porcentagem de CPU etc.) tem uma média de 0,2% a 0,5%, chegando a 2% às vezes.

No insight de desempenho da consulta, o pior é 1,080 segundos, um é de 0,860 segundos e o restante é inferior a 0,5 segundos. Todas as minhas páginas de interesse têm 1 ou 2 consultas, embora o Entity Frameworks possa dividir uma consulta em várias.

As recomendações de desempenho e o ajuste automático não têm sugestões. Estou 99,9% confiante de que estou indexando tudo o que deveria.

Então, aqui estão as minhas questões:

  1. O que mais devo medir? O importante, eu acho, é quanto tempo uma consulta espera para ser executada. Se uma consulta leva 0,0001 segundos para ser executada, mas vem após a consulta de 1 segundo, então é 1,0001 antes de retornar. Vale a pena dar uma olhada? E se sim, onde/como posso encontrar isso?
  2. Acho que minhas dúvidas se reduzem ao que realmente preciso. Os que demoram é um modelo que possui 4 coleções que são preenchidas por meio de uma tabela de junção. E preciso dessas 4 coleções (não leio outras coleções do modelo que não preciso). Há algo que eu possa fazer para acelerar as duas consultas em mais de 0,5 segundo? Quando eu olhei para isso no passado, uma simples leitura na consulta não é mais rápida em um procedimento armazenado (e fazer isso perde as vantagens do Entity Framework).
sql-server
  • 1 respostas
  • 65 Views
Martin Hope
David Thielen
Asked: 2023-11-16 09:13:00 +0800 CST

Como posso copiar um esquema de banco de dados do meu SQL Server local para o Banco de Dados SQL do Azure?

  • 5

Achei que a maneira de fazer isso era acessar meu banco de dados existente (Sql Server 16.0.1105.1 Developer Edition) no SSMS e executar Tasks | Gerar scripts...

insira a descrição da imagem aqui

Isso inclui uma FullTextTable. Então obtive o seguinte script (apenas mostrando o início):

USE [master]
GO
/****** Object:  Database [LouisHowe]    Script Date: 11/15/2023 5:56:31 PM ******/
CREATE DATABASE [LouisHowe]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'LouisHowe', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\LouisHowe.mdf' , SIZE = 73728KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'LouisHowe_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\LouisHowe_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
 WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF
GO
ALTER DATABASE [LouisHowe] SET COMPATIBILITY_LEVEL = 160
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [LouisHowe].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [LouisHowe] SET ANSI_NULL_DEFAULT OFF 

E parece que o banco de dados foi criado ok. Mas recebi perto de 200 mensagens de erro (mostrando apenas as primeiras):

Msg 40508, Level 16, State 1, Line 1
USE statement is not supported to switch between databases. Use a new connection to connect to a different database.
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near 'ON'.
Msg 319, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Msg 5011, Level 14, State 5, Line 12
User does not have permission to alter database 'LouisHowe', the database does not exist, or the database is not in a state that allows access checks.
Msg 5069, Level 16, State 1, Line 12
ALTER DATABASE statement failed.

O que preciso fazer para corrigir o script?

sql-server
  • 1 respostas
  • 38 Views
Martin Hope
David Thielen
Asked: 2023-11-16 09:07:08 +0800 CST

Como altero a senha de login no Banco de Dados SQL do Azure via SSMS

  • 5

Estou no SSMS conectado ao meu banco de dados SQL no Azure

Cliquei com o botão direito no login - nenhuma opção de propriedades no menu

insira a descrição da imagem aqui

Como posso alterar a senha de um login?

ssms
  • 1 respostas
  • 9 Views
Martin Hope
David Thielen
Asked: 2014-10-08 11:50:24 +0800 CST

Usando count() e sum() em um cálculo em um select

  • 0

Estou tentando fazer o seguinte em um único select. Temos um SAAS que possui registros da empresa e registros do usuário. A Useré membro de a Company( Company.CompanyId = User.CompanyId). No registro do usuário, rastreamos o uso da largura de banda desse usuário (para o mês).

Preciso fazer um select que me dê todas as empresas que já utilizaram mais de 1GB de banda por usuário. Eu posso obter esta empresa por empresa usando:

select count(*) as numUsers, 
  sum(BandwidthThisMonth) as totalBandwidth 
from [User] 
where [User].CompanyId = @CompanyId

O problema com essa abordagem é que primeiro preciso obter o CompanyId de cada empresa e, em seguida, extrair esses dados um por um. E só preciso encontrar os casos em que o uso é superior a 1 GB/usuário, o que é raro.

Existe uma maneira de fazer algo assim:

select 
  CompanyId, 
  count(*) as numUsers, 
  sum(BandwidthThisMonth) as totalBandwidth 
from Company, [User] 
where totalBandwidth - (numUsers*1000000000))/1000000000 > 0

Onde o count()& sum()são contra apenas os registros do usuário onde User.CompanyId = Company.CompanyId?

select
  • 1 respostas
  • 113 Views
Martin Hope
David Thielen
Asked: 2014-10-07 15:46:15 +0800 CST

Existe uma maneira de copiar/inicializar valores em um conjunto

  • 0

O que eu quero fazer ( eu sei que isso não funciona ) é:

update stats
set BandwidthLastMonth = BandwidthThisMonth, 
    BandwidthThisMonth=0 
where myPk = 3

Existe uma maneira de fazer isso em uma instrução select? Ou preciso escrever um procedimento armazenado e acertar cada registro duas vezes (espero que não).

Minha solução precisa funcionar para Sql Azure e Sql Server 2008.

sql-server sql-server-2008
  • 1 respostas
  • 51 Views
Martin Hope
David Thielen
Asked: 2014-10-06 16:26:39 +0800 CST

Como posso obter todas as linhas de dados não incluídas em um TVP

  • 0

Estou tentando fazer o seguinte:

declare @domains DomainNames;
declare @CompanyId int
declare @CompanyName varchar(255);
declare @deletedList DomainNames;

set @CompanyId = 239;
set @CompanyName = 'dave';
insert into @domains (Domain) values ('ev2.com'), ('ev3.com');

select * from CompanyDomains where CompanyId = @CompanyId and EmailDomain != @domains

onde recebo de volta todas as linhas na tabela que não possuem um valor EmailDomain correspondente a nenhum dos valores em @domains (e CompanyId tem um valor definido). Existe uma maneira de fazer isso?

SQL Server 2008 e SQL Azure.

obrigado - dave

sql-server-2008 stored-procedures
  • 1 respostas
  • 34 Views
Martin Hope
David Thielen
Asked: 2014-10-06 14:31:39 +0800 CST

Como posso obter uma variável local que é uma lista em um procedimento armazenado?

  • 1

Eu tenho algum código em C # que estou tentando mover para um procedimento armazenado - o Sql Azure não gosta de várias chamadas. Portanto, tudo precisa ser movido para um proc.

Aqui está o código C#:

    List<string> addList = new List<string>(EmailDomains);
    List<string> deleteList = new List<string>();
    using (IDbCommand cmd = conn.CreateCommand())
    {
        cmd.Transaction = transaction;
        cmd.CommandText = "select * from CompanyDomains where CompanyDomains.CompanyId = @CompanyId";
        DbUtilities.AddParam(cmd, "@CompanyId", CompanyId);
        using (IDataReader reader = cmd.ExecuteReader())
        {
            int ordinal = reader.GetOrdinal("EmailDomain");
            while (reader.Read())
            {
                string domain = reader.GetString(ordinal).Trim();
                if (! addList.Remove(domain))
                {
                    deleteList.Add(domain);
                }
            }
        }
    }
    foreach (string domain in deleteList)
    {
        using (IDbCommand cmd = conn.CreateCommand())
        {
            cmd.Transaction = transaction;
            cmd.CommandText =
                "delete from CompanyDomains where CompanyDomains.CompanyId = @CompanyId and CompanyDomains.EmailDomain = @EmailDomain";
            DbUtilities.AddParam(cmd, "@CompanyId", CompanyId);
            DbUtilities.AddParam(cmd, "@EmailDomain", domain);
            cmd.ExecuteNonQuery();
        }
    }

    // deleted domains get added/updated to DeletedCompany
    foreach (string domain in deleteList)
    {
        DeletedCompany.InsertOrUpdate(conn, transaction, domain, CompanyName);
    }

    foreach (string domain in addList)
    {
        using (IDbCommand cmd = conn.CreateCommand())
        {
            cmd.Transaction = transaction;
            cmd.CommandText = "insert into CompanyDomains (CompanyId, EmailDomain) " +
                              "values (@CompanyId, @EmailDomain)";
            DbUtilities.AddParam(cmd, "@CompanyId", CompanyId);
            DbUtilities.AddParam(cmd, "@EmailDomain", domain.Trim());

            cmd.ExecuteNonQuery();
        }
    }

    // added domains get removed from DeletedCompany
    foreach (string domain in addList)
    {
                    using (IDbCommand cmd = conn.CreateCommand())
    {
        if (transaction != null)
            cmd.Transaction = transaction;
        cmd.CommandText = "delete from DeletedCompany where DeletedCompany.Domain = @Domain";
        DbUtilities.AddParam(cmd, "@Domain", domain);
        cmd.ExecuteNonQuery();
    }

    }

O que estou totalmente parado é que não vejo nenhum equivalente de uma lista é SQL. Existe uma maneira de construir tudo isso em uma lista?

Ou existe um delete/insert/update que eu possa fazer onde o select usa a lista que eu passo? Estou passando uma lista na forma de um tipo definido(tabela) que é a nova lista de domínios. Dessa lista:

Qualquer domínio na lista passada que não esteja em CompanyDomains é adicionado a CompanyDomains.

Qualquer domínio na tabela CompanyDomains que não esteja na lista passada é 1) removido de CompanyDomains e 2) adicionado/atualizado à tabela DeletedCompany.

Qualquer domínio que esteja no liast e na tabela DeletedCompany é excluído da tabela DeletedCompany.

A coluna DeletedCompany.Domain é exclusiva nessa tabela. Portanto, adições a ele devem ser um upsert.

A tabela CompanyDomains também tem uma coluna CompanyId e tudo ali onde CompanyDomains.CompanyId = @CompanyId (passado em parâmetro para o proc).

Isso é para Sql Server 2008 e Sql Azure. Ele não precisa ser executado em mais nada.

obrigado - dave

sql-server-2008 stored-procedures
  • 1 respostas
  • 221 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve